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:
[pawn]
#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]
    ;
    [/pawn]


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


    [pawn]
    // 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;
    }
    [/pawn]


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


    [pawn]
    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;
    }
    [/pawn]
    - Kasnije kod logina, kada se igrac loginuje stavite:
    [pawn]
    // Kako ste vec podesili spawn i gde podesavate koordinate stavite samo
    accInfo[playerid][pPosX], accInfo[playerid][pPosY], accInfo[playerid][pPosZ], accInfo[playerid][pPosA];
    [/pawn]


    - 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 -