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
#include
#include
/*
Ili:
#include
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
;
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 = 0
;
COMMAND:savingpos(playerid, const params[]) {
if (savingPos) {
SendClientMessage(playerid, -1, "Iskljucili ste mogucnost cuvanja pozicije pri diskonektovanju!");
savingPos = 0;
} else if (!savingPos) {
SendClientMessage(playerid, -1, "Ukljucili ste mogucnost cuvanja pozicije pri diskonektovanju!");
savingPos = 1;
}
return 1;
}
I na kraju došli smo do callback-a..
public OnPlayerDisconnect(playerid, reason) {
if (savingPos) {
new
_sqlQuery,
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);
mysql_tquery(SQLConnect, _sqlQuery);
accInfo = x, accInfo = y, accInfo = z, accInfo = a;
}
return 1;
}
- Kasnije kod logina, kada se igrac loginuje stavite:
// Kako ste vec podesili spawn i gde podesavate koordinate stavite samo
accInfo, accInfo, accInfo, accInfo;
- To bi otp bilo to od ovog kratkog tutorijala, nadam se da ce nekome kome je to potrebno za svoj server posluziti..