Susikurkime duomenu baze: sbaze.
toliau kuriame lenteles tokias:
Registracija bei kiti punktai kurie nesusyje su SAVE/LOAD yra kurti ne mano.
gerai, defininam kelis dalykus:
#define MySQL_HOST "localhost" // tai yra hostas kur stovi jūsų mysql bazė #define MySQL_USER "root" // user #define MySQL_DATA "sbaze" // tai baze kur yra kurtos lenteles #define MySQL_PASS "" // na o cia pass, nebūtina
Po OnGamemodeInit dedame:
mysql_debug( true ); mysql_connect( MySQL_HOST,MySQL_USER,MySQL_DATA,MySQL_PASS ); if( mysql_ping( ) >= 1 ) { print( "Prisijungeme prie MySQL sekmingai!" ); } else { SendRconCommand( "exit" ); }
Tai kodas kuris kai tik paleidi server.exe prisijungia prie mysql
na toliau darome registracija. Po OnPlayerConnect dedame:
new
Query[ 200 ]
;
format( Query,sizeof( Query ),"SELECT * FROM `players` WHERE `Vardas` = '%s'",GetPlayerNameEx( playerid ) );
mysql_query( Query );
mysql_store_result( );
if( mysql_num_rows( ) )
{
ShowPlayerDialog( playerid,1,DIALOG_STYLE_INPUT,"Login","Prašome prisijungti","Jungtis","Atšaukti" );
}
else
{
ShowPlayerDialog( playerid,0,DIALOG_STYLE_INPUT,"Register","Prašome užsiregistruoti","Register","Atšaukti" );
}
mysql_free_result( );
toliau po DialogResponse dedame:
if( dialogid == 0 ) //Registracija
{
if( response )
{
if( !strlen( inputtext ) )
return SendClientMessage( playerid,-1,"Laukelis Negali bu^ti tuščias." );
if( strlen( inputtext ) > 40 )
return SendClientMessage( playerid,-1,"Slaptažodis negali bu^ti ilgesnis nei 40simbolių." );
new
Query[ 150 ]
;
SetPVarInt(playerid, "Prisiregistravo", 1);
format( Query,sizeof( Query ),"INSERT INTO `players` (Vardas,Slaptazodis) VALUES ('%s','%s')",GetPlayerNameEx( playerid ),inputtext );
mysql_query( Query );
}
else
{
Kick( playerid );
}
return true;
}
if( dialogid == 1 ) //Prisijungimas
{
if( response )
{
if( !strlen( inputtext ) )
return SendClientMessage( playerid,-1,"Laukelis Negali būti tuščias." );
if( strlen( inputtext ) > 40 )
return SendClientMessage( playerid,-1,"Slaptažodis negali būti ilgesnis nei 40simbolių." );
new
Query[ 150 ]
;
format( Query,sizeof( Query ),"SELECT * FROM `players` WHERE `Vardas` = '%s' AND `Slaptazodis` = '%s'",GetPlayerNameEx( playerid ),inputtext );
mysql_query( Query );
mysql_store_result( );
if(! mysql_num_rows( ) )
{
Kick( playerid );
}
else
{
SetPVarInt(playerid, "Prisijunge", 1);
SendClientMessage( playerid,-1,"Prisijungėte sekmingai!" );
}
if( !response )
{
Kick( playerid );
}
mysql_free_result( );
return true;
}
Tai kodas kuris sukurs accounta duomenu bazeje, o jei jis egzistuoja tai prijungs 🙂
dabar po OnPlayerSpawn(Jau kurta mano :D):
if(GetPVarInt(playerid, "Prisijunge") == 1)
{
mysql_player_load(playerid);
GameTextForPlayer(playerid,"~w~Tavo zaidimas uzkrautas",5000,4);
}
if(GetPVarInt(playerid, "Prisiregistravo") == 1)
{
SetPVarInt(playerid, "Prisiregistravo", 2);
TogglePlayerControllable(playerid,false);
SetPlayerPos(playerid,-1957.5652,137.3495,27.6940);
SetPlayerScore(playerid,2500);
SetCameraBehindPlayer(playerid);
SetPlayerSkin(playerid,22);
}
//Givybes ir lytis | Jei zaidejas jau buvo prisijunges arba uzsiregistravo
if(GetPVarInt(playerid, "Prisiregistravo") != 2)
{
SetPlayerHealth(playerid,120);
}
//Spalva ir patvirtinimas | Jei zaidejas ka tik uzsiregistravo ar prisijunge
if(GetPVarInt(playerid, "Prisiregistravo") > 2)
{
SetPVarInt(playerid, "Prisiregistravo", 3);
}
Tai kodas kuris prisiregistravusiam duos pinigu, skin, tasku.
mysql_player_load(playerid); – sia funkcija sukursime veliau, tai yra funkcija kuri loadins zaidejo informacija.
tai ir darom sita punkta. Gamemodo gale dedame:
mysql_player_load(playerid)
{
new query[200],playerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,playerName,MAX_PLAYER_NAME);
format(query,200,"SELECT * FROM players WHERE Vardas='%s'",playerName);
mysql_query(query);
mysql_store_result();
while(mysql_retrieve_row())
{
new Float:coo[3],result[50];
mysql_fetch_field_row(result,"x"); // gaunam informacija is duomenu bazes
coo[0] = floatstr(result);
mysql_fetch_field_row(result,"y");
coo[1] = floatstr(result);
mysql_fetch_field_row(result,"z");
coo[2] = floatstr(result);
SetPlayerPos(playerid,coo[0],coo[1],coo[2]);
mysql_fetch_field_row(result,"Drabuziai");
SetPlayerSkin(playerid,strval(result));
mysql_fetch_field_row(result,"Pinigai");
GivePlayerMoney(playerid,strval(result));
}
}
Cia trumpas LOAD zaidejo, galima ji pildyti.
na dabar darome save funkcija.
taip pat gamemodo gale dedame:
stock MySQL_Save(playerid)
{
new Float:coo[3];
GetPlayerPos(playerid,coo[0],coo[1],coo[2]);
new query[500],playerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,playerName,MAX_PLAYER_NAME);
format(query,500,"UPDATE players SET x='%f', y='%f', z='%f', Pinigai='%i',Score='%i' WHERE Vardas='%s'",coo[0],coo[1],coo[2],PlayerInfo[playerid][specialybe],PlayerInfo[playerid][plead],playerName);
mysql_query(query);
}
sia funkcija panaudosime po OnPlayerDisconnect(playerid, reason)
MySQL_Save(playerid);
Skriptas/Pamoka baigta