ratemap 0.9.6
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
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ć.
Attached Files
rS.
27.01.2009
stmn
27.01.2009
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ż.
rS.
27.01.2009
dlatego postanowiłem go napisać
sam go napisałes ?
przetestuje dzisiaj i dam znać ;-)
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.
Misiaczek ;c
27.01.2009
/* 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?
stmn
27.01.2009
Misiaczek ;c
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
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ć
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.
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. ;-)
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ż
stmn
28.01.2009
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.
Proximus
28.01.2009
Misiaczek ;c
28.01.2009
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
stmn
28.01.2009
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ść.
Miczu
30.01.2009
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.
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.
Miczu
30.01.2009
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 ;-)
To czemu widze w paru miejscach na takiej samej wysokosci klamry?Poprawione. Możesz teraz zajrzeć.
{
{
PS. Dobrze wiedziec ze sie starasz ;-)