Wysłany: 2017-01-06, 16:49
MG303
Wiek: 30 Na forum: 6418 dni Posty: 654
Piwa : 2990
Rejestracja ju? pi?knie dzia?a, ale mam kilka jeszcze pyta?.
1) Mam tablic? pGracz[playerid][AdminLVL]. oraz w MySQL dan? 'AdminLVL '
W jaki spos?b sprawdzi?, czy gracz w bazie ma ustawiony 'AdminLVL' na 1 lub 2 i przypisa? do pGracz[playerid][AdminLVL] ?
2) Zrobi?em te? pGracz[playerid][CzasBlokady] .
Chc? stworzy? komend? /blokada [idgracza] [czas_w_dniach]
i tam da?:
Kod: pGracz[playerid][Blokada] = 1;
pGracz[playerid][CzasBlokady] = ilo??_dni;
W jaki spos?b sprawdza? ile zosta?o tych dni do zdj?cia blokady? Za???my nadaj? blokad? dzisiaj o 17.00 na 3 dni i minie ona dopiero w poniedzia?ek. Wtedy te dane b?d? si? zerowa?.
Wysłany: 2017-01-06, 17:05
Mac
Wiek: 28 Na forum: 4136 dni Posty: 133
Nick w MP: Mac
Piwa : 27
1) Po zalogowaniu nie mo?esz wczyta? warto?ci z bazy danych do pGracz[playerid][AdminLVL] ? P??niej tylko w komendach czy te? innych warunkach masz:
Pawn
if( pGracz [ playerid ][ AdminLVL ] == 1 )
print( "Gracz posiada 1 level admina" );
else if( pGracz [ playerid ][ AdminLVL ] == 2 )
print( "Gracz posiada 2 level admina" );
else
print( "Gracz nie posiada admina" );
2) Lepiej skorzysta? z czasu uniksowego. Czyli, przy komendzie /blokada [idgracza] [czas _w_dniach] da?:
Pawn
pGracz [ playerid ][ CzasBlokady ] = gettime () + ( ilo ?? dni * 86400 ); // czemu 86400? Bo tyle sekund ma doba
Zapisa? warto?? z pGracz[playerid][CzasBlokady] do bazy danych, a p??niej przy wej?ciu wczytywa? i sprawdzanie czy blokada min??a:
Pawn
if( pGracz [ playerid ][ CzasBlokady ] > gettime ())
{
// Blokada jeszcze wa?na
}
else
{
// Blokada zdj?ta
}
Wysłany: 2017-01-06, 17:16
WWilk1
Wiek: 30 Na forum: 4699 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
1. Do pobrania jednej lub dw?ch rzeczy nie ma po co u?ywa? sscanfa.
Pawn format ( str , 128 , "SELECT `AdminLVL` FROM `twojatabela` WHERE `nick` = '%s' AND `AdminLVL` > 0" , PlayerName ( playerid ));
mysql_query ( str );
mysql_store_result ();
if(! mysql_num_rows ())
{
mysql_free_result ();
//Nie znaleziono
return 1 ;
}
new aLvl [ 4 ];
mysql_fetch_field ( "AdminLVL" , aLvl );
mysql_free_result ();
pGracz [ playerid ][ AdminLVL ] = strval ( aLvl );
Co do drugiego to b?dzie zakaz wej?cia gracza na serwer? Mo?na w?a?nie za pomoc? czasu unixowego oraz odpowiedniego zapytania po wej?ciu gracza na serwer.
Taka ma?a podpowied? co do czasu unixowego:
Pawn #define UNIX_DAY (86400) //<<<<----Podpowied? ile dzie? wynosi w czasie Unix.
#define UNIX_HOUR (3600) //<<<<----Podpowied? ile godzina wynosi w czasie Unix.
#define UNIX_MINUTE (60) //<<<<----Podpowied? ile minuta wynosi w czasie Unix.
Wysłany: 2017-01-06, 17:43
MG303
Wiek: 30 Na forum: 6418 dni Posty: 654
Piwa : 2990
Ok super, powoli dzia?am xD
Og?lnie to jak edytowa? jakikolwiek rekord w phpmyadmin? Albo jestem ?lepy, albo nie mog? znale?? ?adnej funkcji.
Wysłany: 2017-01-06, 17:50
Wafelowski
Wiek: 29 Na forum: 5347 dni Posty: 428
Piwa : 100
Kod: UPDATE nazwa_tabeli SET cos1 = '%d', cos2 = '%d' WHERE name = '%s'
#Edit: My bad, ?le zrozumia?em poprzedni post
Ostatnio zmieniony przez Wafelowski 2017-01-06, 18:12, w całości zmieniany 1 raz
Wysłany: 2017-01-06, 17:50
WWilk1
Wiek: 30 Na forum: 4699 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
Wejd? w dan? tabele i masz edytuj, kopiuj, usu?, to wybierasz edytuj.
Po modyfikacji naciskasz wykonaj.
Wysłany: 2017-01-06, 18:10
MG303
Wiek: 30 Na forum: 6418 dni Posty: 654
Piwa : 2990
W?a?nie nie mam takich opcji, mo?liwe ?e ServerProject je zablokowa?
Btw. Jak sformatowa? dat? w phpmyadmin? Da?em jako int(10) (xD) i wychodzi takie co?:
http://imgur.com/uDuO3Ml
Kod: secs = hours*3600;
unbants = gettime()+ secs;
Podobnie robi si? w GUI, gdy dam:
Kod: Data nadania: %02d\nData wyga?ni?cia: %02d.
Wysłany: 2017-01-06, 18:16
Wafelowski
Wiek: 29 Na forum: 5347 dni Posty: 428
Piwa : 100
Wysłany: 2017-01-06, 18:46
MG303
Wiek: 30 Na forum: 6418 dni Posty: 654
Piwa : 2990
Na serwerze ?adnie ju? si? zapisuje (np. 2017-01-06), ale w bazie danych ju? nie. Powr?ci?em do uniksowego czasu i mam taki kod:
Pawn secs = hours * 3600 ;
unbants = gettime ()+ secs ;
format ( query , sizeof ( query ), "INSERT INTO `BANY` (Nick, IP, Admin, Powod, Kiedy, Do_Kiedy) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')" ,
banned , ip , banner , reason , gettime (), unbants );
mysql_query ( query );
Jak przerobi? go, ?eby w bazie pokazywa? normalny format daty?
a je?li chodzi o edytowanie rekord?w, to sp?jrz:
Wysłany: 2017-01-06, 19:48
WWilk1
Wiek: 30 Na forum: 4699 dni Posty: 116
Nick w MP: eep.Wilk
Piwa : 147
Stw?rz sobie w bazie danych pole(np. Time), kt?re ma INT(11) i warto?? domy?ln? 0. Do tego pole(np. DateBan), kt?re b?dzie date.
Miejsce w kt?rym dajesz bana(przyk?adowo):
Pawn getdate ( Year , Month , Day );
format ( str , 128 , "INSERT INTO `bans` (`Nick`, `Admin`, `DateBan`, `Time`) VALUES('%s', '%s', '%04d-%02d-%02d', '%d');" , PlayerName ( GetID ), PlayerName ( playerid ), Year , Month , Day , gettime () + UNIX_DAY * DayBan );
mysql_query ( str );
w OnPlayerConnect:
Pawn format ( str , 178 , "SELECT `Nick`, `Admin`, `DateBan`, `Time` FROM `bans` WHERE `Nick` = '%s' OR `IP` = '%s'" , PlayerName ( playerid ), PlayerIP ( playerid ));
mysql_query ( str );
mysql_store_result ();
if( mysql_num_rows ())
{
new NickB [ MAX_PLAYER_NAME ], NickA [ MAX_PLAYER_NAME ] Date [ 16 ], TimesBan ;
mysql_fetch_row ( str , "|" );
sscanf ( str , "p<|>s[24]s[24]s[16]d" , NickB , NickA , Date , TimesBan );
mysql_free_result ();
if( TimesBan > gettime ())
{
new DayBan , HourBan , MinuteBan ;
TimesBan = TimesBan - gettime ();
ConvertUnixTime ( TimesBan , DayBan , HourBan , MinuteBan );
format ( DialogString , 388 , "Nick: %s - Admin: %s - Wyga?nie za: %d Dni %02d Godzin %02d Minut - Data nadania: %s" , NickB , NickA , DayBan , HourBan , MinuteBan , Date );
SendClientMessage ( playerid , - 1 , str );
Kick ( playerid ); //jak tak dasz to nie wy?wietli jemu info(trzeba da? timer)
return 0 ;
}
else
{
format ( str , 138 , "DELETE FROM `bans` WHERE `Nick` = '%s' OR `IP` = '%s'" , PlayerName ( playerid ), PlayerIP ( playerid ));
mysql_query ( str );
SendClientMessage ( playerid , - 1 , "Tw?j ban wygas?!" );
}
}
else
mysql_free_result ();
No i funkcja, kt?ra rozk?ada czas uniksowy na dni, godziny i minuty:
Pawn ConvertUnixTime ( UnixTime , & Day , & Hour , & Minute )
{
Day = UnixTime / 86400 ;
UnixTime -= Day * 86400 ;
Hour = UnixTime / 3600 ;
UnixTime -= Hour * 3600 ;
Minute = UnixTime / 60 ;
}
Wysłany: 2017-01-07, 09:23
MG303
Wiek: 30 Na forum: 6418 dni Posty: 654
Piwa : 2990
1) Nie bardzo rozumiem to:
Kod: gettime() + UNIX_DAY * DayBan);]
Co z tym UNIX_DAY?
2) Robi? okienko gui z informacjami dot. bana i nie bardzo wiem jak przekonwertowa? dat? wyga?ni?cia bana.
Pawn format ( string , sizeof (string), "Uwaga! Twoje Konto zosta?o zbanowane!\n\nInformacje:\n{a9c4e4}Zbanowany/a przez: {FFFFFF}%s\n{a9c4e4}Pow?d: {FFFFFF}%s\n{a9c4e4}Twoje IP: {FFFFFF}%s\n{a9c4e4}Data nadania: {FFFFFF}%04d-%02d-%02d\n{a9c4e4}Data wyga?ni?cia: {FFFFFF}%d.\n\n{a9c4e4}Je?li uwa?asz, ?e ban jest nies?uszny,\nz??? apelacj? na naszym forum.\n{D70000}Zr?b zdj?cie (F8) tego okna!" , banner , reason , ip , Year , Month , Day , gettime () + 3600 * hours );
ShowPlayerDialog ( bannedid , BanInfoDialog , DIALOG_STYLE_MSGBOX , "Blokada Konta!" , string , "Zamknij" , "" );
3) Zapisuj? takie co? w bazie:
Pawn
format ( query , sizeof ( query ), "INSERT INTO `BANY` (`Nick`, `IP`, `Admin`, `Powod`, `Kiedy`, `Do_Kiedy`) VALUES('%s', '%s', '%s', '%s', '%04d-%02d-%02d', '%d');" , banned , ip , banner , reason , Year , Month , Day , gettime () + 3600 * hours );
mysql_query ( query );
ale w bazie pokazuje si? w Kiedy zamiast ca?ej daty to tylko rok, a Do_kiedy - Unix.
4) w Data nadania pokazuje tylko rok.:
Pawn new DayBan , HourBan , MinuteBan ;
TimesBan = TimesBan - gettime ();
ConvertUnixTime ( TimesBan , DayBan , HourBan , MinuteBan );
format ( s , sizeof ( s ), "Nick: %s. Ban wyga?nie za: %d Dni %02d Godzin %02d Minut - Data nadania: %s, pow?d: %s" , NickB , DayBan , HourBan , MinuteBan , Date , Reason );
SendClientMessage ( playerid , - 1 , s );
Wysłany: 2017-01-07, 11:02
Combacior
Wiek: 29 Na forum: 5795 dni Posty: 1516
Piwa : 2161
Wszystko co potrzebujesz, znalaz?by? w moim starym skrypcie uG. Do bazy danych zapisuj czas uniksowy, bo z nim mo?na zrobi? dos?ownie wszystko w bardo ?atwy spos?b. Jak zamieni? czas uniksowy na normaln? dat?? Kto? ju? tutaj wspomnia? o zastosowaniu rozwi?zania FROM_UNIXTIME
Kod: SELECT FROM_UNIXTIME(time, '%H:%i %d.%m.%Y') FROM tabela WHERE ...
Mo?esz sobie ustawi? co ma by? wy?wietlane najpierw, w aktualnym formacie jest - godzina:minuta dzie?.miesi?c.rok - mo?esz sobie zmieni? to, np. doda? spacje zamiast kropek, wtedy rozdzielisz sobie wszystko sscanfem. Tych format?w jest sporo, wszystkie znajdziesz tutaj: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format
Wysłany: 2017-01-07, 19:21
MG303
Wiek: 30 Na forum: 6418 dni Posty: 654
Piwa : 2990
Tagi: dane :: mysql.
Anonymous
Na forum: 245 dni
Posty: 1
Anonymous Koniecznie zajrzyj na: