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