Jump to content

Sari peste OnPlayerRequestClass cu SQLite


Rimmon

Recommended Posts

Tutoriale necesare:

Tutorial:

PS:Inainte de a citi acest tutorial trebuie sa stiti ca , in acest tutorial va voi arata cum sa sari peste OnPlayerRequestClass doar daca esti inregistrat , daca nu esti inregistrat nu vei sari peste OnPlayerRequestClass , pentru a putea alege skin-ul cu care te vei spawna automat cand le loghezi

In acest tutorial va voi prezenta cum sa "sari" peste OnPlayerRequestClass , folosit uneori sau mereu la serverele de RolePlay

Sa incepem:

Prima data trebuie sa creem o variabila , eu o voi face tip bool , voi o puteti face si integer daca vreti

new bool: firstC [ MAX_PLAYERS ] ; 
Tocmai ce am creat variabila firstC ( first connect ) , de aceasta vabiabila ne v-om ajuta ca sa "sarim" peste OnPlayerRequestClass Acum ,  trebuie sa merge la dialogul de register si setati variabila firstC pe true
firstC [ playerid ] = true ; 
Si la dialogul de login il setam pe false
firstC [ playerid ] = false ;
Acum mergem la OnPlayerRequestClass Sa zicem ca voi aveti asa la OnPlayerRequestClass
public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
	return 1;
}
Acum trebuie sa editam acest cod si sa facem urmatoarele: Daca abia s-a inregistrat ii va aparea sa selecteze skin-ul , iar daca este deja inregistrat si acum s-a logat il va spawna cu skin-ul care l-a ales la inregistrare
public OnPlayerRequestClass(playerid, classid)
{
     if ( firstC [ playerid ] == true ) // true l-am setat la dialogul de register , deci daca abia se inregistreaza ii va aparea sa selecteze skinul
     {
	SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
     }
     else return SetTimerEx ( "spawn" , 1 , false , "i" , playerid ) ; // daca este deja inregistrat si acum se logheaza il va spawna imediat 
     return 1;
}
Daca incercati sa testati acum nu va merge deoarece nu aveti callback-ul spawn in GM , ca sa creati callback-ul spawn trebuie sa folosim un forward
forward spawn ( playerid ) ;
iar callbackul va arata asa
public spawn ( playerid ) return SpawnPlayer ( playerid ) ;
Dupa ce am facut toate acestea , trebuie sa salvam skin-ul care l-a ales dupa ce s-a inregistrat Pentru a intelege m-ai bine tot ce am facut pana acum si ce voi face mai incolo cititi tutorialele recomandate Prima data trebuie sa creem sus in script 2 variabile una cu tag-ul DB: si una tip string
new DB:pSkin ,
     string [ 200 ] ;
La OnGameModeInit
pSkin = db_open ( "PlayersSkin.db" ) ; //creaza daca nu exista sau deschide daca exista baza de date
db_query ( pSkin , "CREATE TABLE IF NOT EXISTS `Users` ( `Name` TEXT ,\
                                               `SkinID` NUMERIC )" ) ; //Creaza tabelul `Users` in baza de date `PlayersSkin` daca nu exista
La OnPlayerSpawn trebuie sa facem asta ( cateva explicatii cu // )
public OnPlayerSpawn ( playerid )
{
     if ( firstC [ playerid ] == true ) // Daca si-a ales skin-ul in Database i se va seta la coloana SkinID , id-ul skin-ului pe care l-a ales
     {
          new name [ 24 ] ;
          GetPlayerName ( playerid , name , 24 ) ;
          format ( string , 200 , "INSERT INTO `Users` VALUES ('%s' , '%d')" , name , GetPlayerSkin ( playerid )  ) ;
          db_free_result ( db_query ( pSkin , string ) ) ; 
     }
     else if ( firstC [ playerid ] == false ) // daca este inregistrat si s-a logat i se v-a seta skinul care l-a ales la inregistrare
     {
          new name [ 24 ] ;
          GetPlayerName ( playerid , name , 24 ) ;
          new DBResult:res ;
          format ( string , 200 , "SELECT * FROM `Users` WHERE `Name` =  '%s'" , name ) ; // Selecteaza tot din tabelul `Users` din baza de date `PlayersSkin`
          res =  db_query ( pSkin , string ) ;  
          if ( db_num_rows ( res ) ) //Daca exista acel player in database i se v-a seta skin-ul ales
          {
               new field [ 10 ] ;
               db_get_field_assoc ( res , "SkinID" , field , 10 ) ;
               SetPlayerSkin ( playerid , strval ( field ) ) ;
          }         
     }
     return 1 ;
}
PS:Eu la OnPlayerSpawn am altfel , nu am testat cum am facut in acest tutorial Daca vreti sa ii setati voi skin-ul , fara sa mai aleaga el trebuie sa faceti urmatoarele: Stergeti tot codul de la OnPlayerSpawn ( acela care l-am pus eu in tutorial ) iar la OnPlayerRequestClass faceti asa
public OnPlayerRequestClass(playerid, classid)
{
     SetTimerEx ( "spawn" , 1 , false , "i" , playerid ) ;
     SetPlayerSkin ( playerid , skin-ul ) ;
     return 1;
}

Massari e curva mea

Link to comment
Share on other sites

  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.