←  Pluginy AMXX

AMXX.pl: Support AMX Mod X i SourceMod

»

ratemap 0.9.6

  • +
  • -
stmn - zdjęcie stmn 27.01.2009

Ratemap 0.9.6 made by stmn


Plugin pozwala graczom ocenić mapę, dzięki połączeniu z bazą mysql możliwy jest prosty ranking map, dzięki czemu można poznać ulubione mapy graczy czy również te najbardziej znienawidzone. Plugin można używać również lokalnie na plikach, jednak daje to zdecydowanie mniej możliwości. Wszystkie pliki i katalog oraz w przypadku bazy tabela, tworzą się automatycznie.


Instalacja:
Wrzucić plik ratemap.amxx do katalogu plugins, oraz dopisać do plugins.ini: ratemap.amxx
Wrzucić plik ratemap.txt do katalogu date/lang/

Komendy gracza:
/rate // otwiera menu oceniania,

Cvars:
rm_tag "[RateMap]" // pozwala zmienić tag przed napisami, domyślnie [RateMap]
rm_sql <1|0> // 1 - operuje na bazie mysql, 0 - lokalnie na plikach, domyślnie: 1

rm_mode // pozwala zmienić sposób sprawdzania ocen, domyślnie: steamid

rm_host "localhost" // należy podać w przypadku włączonego rm_sql
rm_user "username" // należy podać w przypadku włączonego rm_sql
rm_pass "password" // należy podać w przypadku włączonego rm_sql
rm_db "database" // należy podać w przypadku włączonego rm_sql
rm_hostname "Your Hostname" // pozwala zdefiniować nazwę serwera, domyślnie,: Your Hostname

Site-ranking:
Strona wyświetlająca ranking

ToDo:
odpalenie menu oceny po określonym czasie,

Historia:
30.01.09 [ver. 0.9.6]
- naprawiony nie groźny błąd związany z oddawaniem ocen, który pojawiał się w logach
29.01.09 [ver. 0.9.5]
- skasowany rm_table,
- dodany rm_hostname,
- ulepszona obsługa wielu serwerów przez jeden skrypt php,
28.01.09 [ver. 0.9.3]
- dodany rm_mode oraz rm_table,
- ulepszony ranking www, dodane gwiazdki zamiast zwykłej liczby
27.01.09 [ver. 0.9]
- ulepszona multijęzykowość,

Info:
Jeśli macie jakieś propozycje i pomysły co do tego pluginu to pisać. Jest to mój pierwszy poważniejszy plugin, którym się dziele, dlatego możliwe, że kod nie jest najbardziej zoptymalizowany, jednak cały czas mogę go rozwijać jeśli komuś się spodoba. Jeśli ktoś zauważy błędy to również pisać.

Załączone pliki

Odpowiedz

  • +
  • -
rS. - zdjęcie rS. 27.01.2009

O:) ciekawe ciekawe pozwala to stwirdzic na jakich mapach gracze lubią grac ^^ dzięki przyda się .
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 27.01.2009

O:) ciekawe ciekawe pozwala to stwirdzic na jakich mapach gracze lubią grac ^^ dzięki przyda się .


Dokładnie, nie znalazłem takiego innego pluginu (znalazłem tylko do Source) dlatego postanowiłem go napisać. Jeśli masz jakieś propozycje to śmiało pisać, jeśli znajdzie ktoś błędy to również.
Odpowiedz

  • +
  • -
rS. - zdjęcie rS. 27.01.2009

dlatego postanowiłem go napisać


sam go napisałes ?

przetestuje dzisiaj i dam znać ;-)
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 27.01.2009

dlatego postanowiłem go napisać


sam go napisałes ?

przetestuje dzisiaj i dam znać ;-)


Oczywiście w trakcie pisania musiałem zaglądnąć to niektórych tutoriali np. żeby poznać funkcje modułu sqlx. ;)
Odpowiedz

  • +
  • -
MafiaDL - zdjęcie MafiaDL 27.01.2009

Brawo ;-)
Odpowiedz

  • +
  • -
Klycior - zdjęcie Klycior 27.01.2009

Fajne ale co do map używam GameTracker :)
Odpowiedz

  • +
  • -
Misiaczek ;c - zdjęcie Misiaczek ;c 27.01.2009

Po co jest ten kawałek kodu w SMA...:
/*
public client_putinserver(id)
{
	first[id] = 1;
}

public test(id)
{
	fnGreenChat(id,"%s TEST.",tag)	
}

public player_spawn(id)
{
if(first[id])
	{
fnGreenChat(id,"-- %d -- 1",task)	
if(task==5){
	iftask=1
	fnGreenChat(id,"-- %d -- 2",task)	
	set_task(30.0,"check",id=0)
} else if(task==10){	
	iftask=1
	set_task(600.0,"test")
} else if(task==15){
	iftask=1	
	set_task(900.0,"test")
} else if(task==20){
	iftask=1
	set_task(1200.0,"test")
}
}
first[id] = 0;
} 



public rateinfo(id)
{
	new readdata[128],txtlen
	new parsedsteamid[32]
	new Float:suma
	new Float:licznik
	new Float:srednia
	new srednia2
	
	new fsize = file_size(filename,1)
	for (new line=0;line<fsize;line++)
	{
		
		read_file(filename,line,readdata,127,txtlen)
		parse(readdata,parsedsteamid,31,parsedrate,2)
		
		suma=suma+str_to_float(parsedrate[0]);
		
		licznik=licznik+1
		
	}
	srednia=suma/licznik;
	srednia2=floatround(srednia);
	if(srednia2==0){
	fnGreenChat(id,"%s Nikt nie ocenial jeszcze tej mapy.",tag)	
	}
    
   }

public client_putinserver(id)
{
	first[id] = 1;
}

public player_spawn(id)
{
	new readdata[128],txtlen
	new parsedsteamid[32]
	new Float:suma
	new Float:licznik
	new Float:srednia
	new srednia2
	new ocenka[12]
	
	new fsize = file_size(filename,1)
	for (new line=0;line<fsize;line++)
	{
		
		read_file(filename,line,readdata,127,txtlen)
		parse(readdata,parsedsteamid,31,parsedrate,2)
		
		suma=suma+str_to_float(parsedrate[0]);
		
		licznik=licznik+1
		
	}
	
	if(first[id])
	{
		
	srednia=suma/licznik;
	srednia2=floatround(srednia);
	
	if(srednia2==1){
		ocenka="do dupy";
	} else if(srednia2==2){
		ocenka="slaba";
	} else if(srednia2==3){
		ocenka="srednia";
	} else if(srednia2==4){
		ocenka="nawet fajna";
	} else if(srednia2==5){
		ocenka="fajna";
	} else if(srednia2==6){
		ocenka="zajebista";
	}
	
	if(srednia2==0){
	fnGreenChat(id,"%s Nikt nie ocenial jeszcze tej mapy.",tag)	
	} else {
	fnGreenChat(id,"%s Ta mapa zdaniem graczy jest %s. Aby ocenic uzyj komendy /rate",tag,ocenka)	
}
			
	
		
	first[id] = 0;
	}
	return PLUGIN_CONTINUE
} 
*/

... Skoro i tak jest wyłączony?
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 27.01.2009

Po to żebyś się głupio pytał. Ten kawałek jest bo nad nim pracuje, a wyłączyłem go bo nie działa prawidłowo. Jak Ci przeszkadza to sobie skasuj. ;)
Odpowiedz

  • +
  • -
Misiaczek ;c - zdjęcie Misiaczek ;c 27.01.2009

stmn, spytałem się normalnie... a ty oburzony od razu jesteś...

Ps. dodaj że można wybrać na jakiej zasadzie ma zapisywa dane bo aktualnie bazuje to na STEAMID, najlepiej jakbyś zrobił do wyboru :
1. Steam ID
2. IP
3. Nick

Ps2. jak nad czymś pracujesz to wtedy nie dodawaj tego do oficialnej wersji bo widzisz jak by ktos nie pomyślał że kod może bydź w budowie i by zaznaczył żeby go wczytywało i by mu potem błędy wywalały to bys mu musiał to tłumaczyc ;d

Ps.3
WWW:
$polaczenie = @mysql_connect('sql.onyxad.nazwa.pl', 'onyxad_2', '***********')
or die('Brak połaczenia z serwerem mysql. Bład: '.mysql_error());

$db = @mysql_select_db('onyxad_2', $polaczenie)
or die('Nie mogę połaczyć się z baza danych. Bład: '.mysql_error());

może zmień to na:

$polaczenie = @mysql_connect('localhost', 'login_admina_bazy_danych', 'hasło_bazydanych')
or die('Brak połaczenia z serwerem mysql. Bład: '.mysql_error());

$db = @mysql_select_db('nazwa_bazy_danych', $polaczenie)
or die('Nie mogę połaczyć się z baza danych. Bład: '.mysql_error());

albo jeszcze zrobić to tak:


// Baza Danych
$config->uzytkownik 		= "root";
$config->haslo 		        = "";
$config->nazwabazy 		= "mapy";
$config->serwersql		= "localhost";

$polaczenie = @mysql_connect($config->serwersql, $config->uzytkownik, $config->haslo)
or die('Brak połaczenia z serwerem mysql. Bład: '.mysql_error());

$db = @mysql_select_db($config->nazwabazy, $polaczenie)
or die('Nie mogę połaczyć się z baza danych. Bład: '.mysql_error());

$wynik = mysql_query("SELECT mapname, rate FROM rates GROUP BY mapname ORDER BY AVG(rate) DESC");

nie testowałem ale powinno działać
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 27.01.2009

Ps. dodaj że można wybrać na jakiej zasadzie ma zapisywa dane bo aktualnie bazuje to na STEAMID, najlepiej jakbyś zrobił do wyboru :
1. Steam ID
2. IP
3. Nick


Można zrobić, ale moim zdaniem steamID całkowicie wystarcza. ;-)

Ps2. jak nad czymś pracujesz to wtedy nie dodawaj tego do oficialnej wersji bo widzisz jak by ktos nie pomyślał że kod może bydź w budowie i by zaznaczył żeby go wczytywało i by mu potem błędy wywalały to bys mu musiał to tłumaczyc ;d


Jak ktoś się nie zna to nie powinien się bawić. Nie po to zakryłem coś, żeby ktoś to odkrywał, jeśli ktoś tego nie rozumie to współczuje. Nie zamierzam odpowiadać za błędy wynikłe z nie mądrego edytowania sma. :D

Co do kawałka php: dziękuje za ujawnienie danych. Wydawało mi się, że dawałem poprawnie zmodyfikowany kod.

Czekam na więcej propozycji. ;-)
Odpowiedz

  • +
  • -
Misiaczek ;c - zdjęcie Misiaczek ;c 28.01.2009

Ps. dodaj że można wybrać na jakiej zasadzie ma zapisywa dane bo aktualnie bazuje to na STEAMID, najlepiej jakbyś zrobił do wyboru :
1. Steam ID
2. IP
3. Nick


Można zrobić, ale moim zdaniem steamID całkowicie wystarcza. ;-)


to dorób mi się bardzo przyda i co niektórym też :P
Odpowiedz

  • +
  • -
box. - zdjęcie box. 28.01.2009

No super plugin chyba go użyje :D
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 28.01.2009

Nowa wersja: 0.9.3.
Została dodana możliwość wyboru sposobu sprawdzania danych: ze względu na steamid, nickname lub ip. Sprawdzałem tylko nickname, ale reszta powinna też działać. Można teraz również zmienić nazwę tabeli. W rankingu zamiast cyferek oznaczających średnią ocen, teraz pokazują się fajne gwiazdki. :)
Odpowiedz

  • +
  • -
Proximus - zdjęcie Proximus 28.01.2009

Może jeszcze jak już ranking - pytanie jaką broń lubisz najbardziej czy coś ;)
Odpowiedz

  • +
  • -
Misiaczek ;c - zdjęcie Misiaczek ;c 28.01.2009

Błąd mam ;d
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/cspzb/public_html/mapy/index.php on line 49

// mySQL
$hostname="web2.hitme.pl";
$username= "cspzb_admin";
$password="************";
$database="cspzb_mapy"; 

// table
$table="oceny"; // default: rates

$polaczenie = @mysql_connect($hostname, $username, $password)
or die('Brak połaczenia z serwerem mysql. Bład: '.mysql_error());

$db = @mysql_select_db($database, $polaczenie)
or die('Nie mogę połaczyć się z baza danych. Bład: '.mysql_error());

$wynik = mysql_query("SELECT mapname, rate FROM $table GROUP BY mapname ORDER BY AVG(rate) DESC");

znalazłem przyczynne ;s jest to
rm_table "rates"
po zmianie na cos innego na www i w amxx.cfg nie dziala strona ;d
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 28.01.2009

Jeśli na stronie masz: $table="oceny";
to w amxx.cfg musisz mieć: rm_table "oceny"
Jeśli tak będzie to musi działać i nie ma innej opcji. Zrestartuj serwer i sprawdź czy tabela "oceny" istnieje w bazie. Możesz spróbować skompilować sma, bo jestem pewien, że się plik zaktualizował. (czasami coś się chyba nie aktualizuje)

Jutro będzie nowa wersja bez rm_table i ze stałą nazwą tabeli, zamiast niej będzie coś innego dzięki czemu skrypt zwiększy funkcjonalność. :)
Odpowiedz

  • +
  • -
Miczu - zdjęcie Miczu 30.01.2009

stmn, uzyj tabulatorow by zapanowac nad chaotycznym kodem, cod powinien wygladac mniej wiecej tak:
public fun()
{
    if(a)
    {
        x++
        y--
    }
    else
    {
         if(x==y)
         {
             cos++
         }
         else
         {
             cos--
         }
    }
}
Ilosc tabulatorow powinna swiadczyc jak bardzo jest to zagniezdzone...

Mozesz tez usunac z pugin_init robienie tabeli i zamiast tego zrobic i wywloac w plugin_init np table_init().

SQL_MakeDbTuple - tuple od polaczenia z baza danych wystarczy zrobic raz i uwolnic ja na koniec mapy ( plugin_end() ).

PS. mimo wszystko zbedny kod mogles nam odpuscic.
Odpowiedz

  • +
  • -
stmn - zdjęcie stmn 30.01.2009

stmn, uzyj tabulatorow by zapanowac nad chaotycznym kodem, cod powinien wygladac mniej wiecej tak:


Poprawione. Możesz teraz zajrzeć. ^^

Mozesz tez usunac z pugin_init robienie tabeli i zamiast tego zrobic i wywloac w plugin_init np table_init().


W sumie to nie wiem jakie korzyści z tego są ale zrobiłem.

SQL_MakeDbTuple - tuple od polaczenia z baza danych wystarczy zrobic raz i uwolnic ja na koniec mapy ( plugin_end() ).


Poprawiłem - SQL_MakeDbTuple jest tylko na początku. Co do uwalniania to trzeba tylko chyba uwolnić SQLConnection, a nie samo SQL_MakeDbTuple, uwalniam je po każdym połączeniu,(czy jeśli otwiera połączenie i nie zamknie to kolejna operacja wywoła osobne połączenie czy jedno będzie cały czas? ;> ) ponieważ przy każdej operacji muszę na nowo wywołać połączenia, bo po jakimś czasie najzwyczajniej gubi połączenie. O:)
Odpowiedz

  • +
  • -
Miczu - zdjęcie Miczu 30.01.2009

Robisz raz:
g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db)

g_SqlTuple - w tym masz przechowane niezbedne dane potrzebne do polaczenia (to nie laczy z sql'em)

Mozesz, ale nie musisz uwolnic w/w na koncu pluga.


Kiedy juz masz w/w tuple, mozesz zrobic faktyczne polaczenie:
SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)

Po uwolnieniu go tracisz polaczenie wiec musisz je jeszcze raz wywolac w razie potrzeby wykozystania z bazy danych. Koniecznie musisz uwolnic ja na koniec (moze sie zle skonczyc bodaj jak zostawisz otwarte polaczenie przy zmianie mapy...).

[ Dodano: 30-01-2009, 20:38 ]
Zrob tak by w plugins ini byly tylko elementy takie jak register_cvar, events, midget, etc.

Pobieranie cvarow i robienie tupla przenies do innej funkcji. Rownie dobrze mozesz zrobic tak z logiem do pliku (ten z plugin_init). To uporzadkuje troche plugin_init, a po nazwie table_init(); (hmm... moze dodac przedrostek sql?) kazdy sie skapnie co tam jest.

Poprawi to czytelnosc kodu ;-)

Poprawione. Możesz teraz zajrzeć.

To czemu widze w paru miejscach na takiej samej wysokosci klamry?
{
{

PS. Dobrze wiedziec ze sie starasz ;-)
Odpowiedz