Saving player position after disconnect in MySQL - How to make it?


Započeo YumikoJR, Novembar 11, 2019, 22:36:13 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Saving Player Position after disconnect


Čemu služi i kako funkcioniše?


- Nakon sto se igrac diskonektuje (callback OnPlayerDisconnect(playerid, reason)), automatski cuva igracevu trenutnu poziciju i ispisuje je u databazu (primer: table users (pPosX, pPosY, pPosZ))..
I kasnije ponovo kada se loginuje, ili jos bolji primer kada mu crasha, spawnovace ga na staru poziciju gde je i bio..
U ovom slucaju igrac ce moci da bira da li zeli da mu cuva poziciju ili ne..


Kako napraviti to?


- Pre svega, stvari koje ce nam biti potrebne:
#include <a_samp>
#include <a_mysql>
#include <YSI_Visual\y_commands>
/*
Ili:
#include <Pawn.CMD>
i ostali komandni procesori mada mislim da vam ne treba ni jedan drugi osim jednog od ta dva..


[*] - Naravno trebace vam i register/login sistem u MySQL-u..
*/

enum ACCOUNTS_ENUM {
  Float:pPosX,
  Float:pPosY,
  Float:pPosZ,
  Float:pPosA // facing angle
}

new
  accInfo[MAX_PLAYERS][ACCOUNTS_ENUM]
;



Kako napraviti komandu da li igrač želi da mu čuva poziciju?


// U ovom slucaju koristio sam y_commands (zeex commands compatibility)
#define CMD:%0(%1) YSIM_COMMAND %0(%1,__help)if(__help)return 0;else
#define COMMAND CMD

//- To gore vam ne treba, samo sam izvadio iz inc-a compatibility..

new
  savingPos[MAX_PLAYERS] = 0
;

COMMAND:savingpos(playerid, const params[]) {
  if (savingPos[playerid]) {
    SendClientMessage(playerid, -1, "Iskljucili ste mogucnost cuvanja pozicije pri diskonektovanju!");
    savingPos[playerid] = 0;
  } else if (!savingPos[playerid]) {
    SendClientMessage(playerid, -1, "Ukljucili ste mogucnost cuvanja pozicije pri diskonektovanju!");
    savingPos[playerid] = 1;
  }
  return 1;
}



I na kraju došli smo do callback-a..


public OnPlayerDisconnect(playerid, reason) {
  if (savingPos[playerid]) {
    new 
      _sqlQuery[124],
      Float:x,
      Float:y,
      Float:z,
      Float:a
    ;
    GetPlayerPos(playerid, x, y, z); GetPlayerFacingAngle(playerid, a);    

    mysql_format(SQLConnect, _sqlQuery, sizeof(_sqlQuery), "UPDATE `users_table_name` SET `pposx` = '%f', `pposy` = '%f', `pposz`= '%f', `pposa` = '%f' WHERE `psqlid` = '%d'", x, y, z, a, accInfo[playerid][pSQLID]);
    mysql_tquery(SQLConnect, _sqlQuery);
  
    accInfo[playerid][pPosX] = x, accInfo[playerid][pPosY] = y, accInfo[playerid][pPosZ] = z, accInfo[playerid][pPosA] = a;
  }
  return 1;
}

- Kasnije kod logina, kada se igrac loginuje stavite:
// Kako ste vec podesili spawn i gde podesavate koordinate stavite samo
accInfo[playerid][pPosX], accInfo[playerid][pPosY], accInfo[playerid][pPosZ], accInfo[playerid][pPosA];



- To bi otp bilo to od ovog kratkog tutorijala, nadam se da ce nekome kome je to potrebno za svoj server posluziti..


Fina stvar , well done  :)
[ мαтяүx ]
- Pusti našu pjesmu , tebi čuvam zadnji ples -