Szerző Téma: Pozíció elmentése kilépsnél  (Megtekintve 1391 alkalommal)

Pozíció elmentése kilépsnél
« Dátum: 2012. szeptember 12. - 16:22:50 »
0 Show voters
Valaki tudna Abban segíteni hogy Ahol kilép az illetõ ugyan oda tegye vissza Ha Belép? LAdmin van a szerveren!
[mod]A téma neve mindig a problémádra utaljon![/mod]
« Utoljára szerkesztve: 2012. szeptember 12. - 18:36:02 írta kadaradam »

Pozíció elmentése kilépsnél
« Válasz #1 Dátum: 2012. szeptember 12. - 16:33:22 »
0 Show voters
Használsz valamilyen adatbázis kezelõ plugint?

Pozíció elmentése kilépsnél
« Válasz #2 Dátum: 2012. szeptember 12. - 16:38:13 »
0 Show voters
Nem.

Pozíció elmentése kilépsnél
« Válasz #3 Dátum: 2012. szeptember 12. - 16:47:21 »
0 Show voters
Idézetet írta: narancs741 date=1347460693\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"27604\" data-ipsquote-contentclass=\"forums_Topic
Nem.
 
Dini -vel meg lehet csinálni.
szerintem...  :hmmm:

Pozíció elmentése kilépsnél
« Válasz #4 Dátum: 2012. szeptember 12. - 18:55:48 »
0 Show voters
És milyen módon?

Nem elérhető JackBronson

  • 1499
  • ??
    • Profil megtekintése
Pozíció elmentése kilépsnél
« Válasz #5 Dátum: 2012. szeptember 12. - 19:01:55 »
0 Show voters
mod elejére (Nem én irtam,találtam)
 
new savePname[MAX_PLAYERS][MAX_PLAYER_NAME], namecount = 0;
new Float:savePpos[MAX_PLAYERS][4];

 

OnPlayerDisconek alá
public OnPlayerDisconnect(playerid, reason)
{
    new playername[MAX_PLAYER_NAME]; // ide lementjük a játékos nevét
    GetPlayerName(playerid, playername, MAX_PLAYER_NAME); // ezzel
    new bool:megvolt = false; // ezzel a logikai változóval azt nézzük meg, hogy a játékosnak lementettük-e már a pozícióját
    for(new i = 0; i <= namecount; i++) // végignézzük a savePname tömböt, hogy lementettük-e már a játékos nevét. Végigmegyünk az elejétõl a namecount-ig azaz addig ahány játékos lépett már le a szerverrõl
    {
        if(!strcmp(savePname, playername)) // összehasonlítjuk az elmentett nevet a játékos nevével
        { // ha egyezik akkor... (Amit keresünk azt az i. rekeszben találtuk meg)
            GetPlayerPos(playerid, savePpos[0], savePpos[1], savePpos[2]); // lementjük a koordinátákat
            GetPlayerFacingAngle(playerid, savePpos[3]); // és az elfordulást
            megvolt = true; // és csak meg lett a játékos, szóval igazat adunk a megvoltnak!
            break; // leállítjuk a ciklust, mert megtaláltuk azt, amit akarunk
        }
    }
    if(!megvolt) // no de mi van akkor ha még sem volt meg?
    {
        savePname[namecount] = playername; // akkor egy új helyre lementjük a játékos nevét (a namecount jelzi az új helyet is)
        GetPlayerPos(playerid, savePpos[namecount][0], savePpos[namecount][1], savePpos[namecount][2]); // a pozícióit
        GetPlayerFacingAngle(playerid, savePpos[namecount][3]); // az elfordulást
        namecount++; // és növeljük a lementett játékosok számát
    }
    return 1;
}

 
OnPlayerSpawn alá
 
public OnPlayerSpawn(playerid)
{
    new playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
    for(new i = 0; i <= namecount; i++)
    {
        if(!strcmp(savePname, playername))
        {
            SetPlayerPos(playerid, savePpos[0], savePpos[1], savePpos[2]);
            SetPlayerFacingAngle(playerid, savePpos[3]);
        }
    }
    return 1;
}

 
Nem én irtam találtam. (SPatrik irta asszem)

Nem elérhető Rupert

  • 2301
    • Profil megtekintése
Pozíció elmentése kilépsnél
« Válasz #6 Dátum: 2012. szeptember 12. - 19:05:30 »
0 Show voters
Felesleges ez az egész boolean megoldás..
1. A booleant nem éri meg használni memóriaigénye miatt.
2. Dini-vel el is menti az adatokat.

Nem elérhető JackBronson

  • 1499
  • ??
    • Profil megtekintése
Pozíció elmentése kilépsnél
« Válasz #7 Dátum: 2012. szeptember 12. - 19:07:31 »
0 Show voters
Igen a bool több memóriát vesz igénybe (Gondolom)
De a Dini össze keveri a koordinátákat itt.
Nekem ezért volt a bajom vele.
TErmészetesen nem mindig de felálhat ez a hiba

Nem elérhető Mokus

  • 608
    • Profil megtekintése
Pozíció elmentése kilépsnél
« Válasz #8 Dátum: 2012. szeptember 12. - 19:29:45 »
0 Show voters
Tessék.
 
new Float:x[MAX_PLAYERS],Float:y[MAX_PLAYERS],Float:z[MAX_PLAYERS];
enum pInfo
{
pPozicio,
}
public OnPlayerDisconnect(playerid, reason)
{
        dini_IntSet(file,\"Pozicio\",GetPlayerPos(playerid,x[playerid],y[playerid],z[playerid]));
}
//register parancs alá
        dini_IntSet(file,\"Pozicio\",GetPlayerPos(playerid,x[playerid],y[playerid],z[playerid]));
//login parancs alá
         SetPlayerPos(playerid,x[playerid],y[playerid],z[playerid]);
« Utoljára szerkesztve: 2012. szeptember 12. - 19:32:08 írta Mokus »

Nem elérhető Depi

  • 2259
  • Még mindig TrYp. :)
    • Profil megtekintése
Pozíció elmentése kilépsnél
« Válasz #9 Dátum: 2012. szeptember 12. - 19:45:23 »
0 Show voters
Idézetet írta: JaCk date=1347469651\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"27604\" data-ipsquote-contentclass=\"forums_Topic
Igen a bool több memóriát vesz igénybe (Gondolom)
De a Dini össze keveri a koordinátákat itt.
Nekem ezért volt a bajom vele.
TErmészetesen nem mindig de felálhat ez a hiba
 
Pontosabban dini_Int meg csatlakozáskor beolvasod a lementett koordinátákat, nem pedig újra állítod. dini_int, és akkor használod a SetPlayerPos függvényt.

Pozíció elmentése kilépsnél
« Válasz #10 Dátum: 2012. szeptember 12. - 20:03:14 »
0 Show voters
Szóval akkor összegezve mit cinsáljak? Le irnátok?
Egyébként amit Mókus irt az nem jó :/

Nem elérhető Mokus

  • 608
    • Profil megtekintése
Pozíció elmentése kilépsnél
« Válasz #11 Dátum: 2012. szeptember 12. - 20:08:08 »
0 Show voters
Jó csak rosszul csinálhattad én így csináltam meg kérdésem válaszaibol raktam össze és mûködik ha dinis az admin rendszered akkor jónak kell lennie

Pozíció elmentése kilépsnél
« Válasz #12 Dátum: 2012. szeptember 12. - 21:19:18 »
0 Show voters
Még mindig nem találtam meg a megfelelõ leírást!

Pozíció elmentése kilépsnél
« Válasz #13 Dátum: 2012. szeptember 12. - 21:31:32 »
0 Show voters
Idézetet írta: Mokus date=1347470985\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"27604\" data-ipsquote-contentclass=\"forums_Topic
Tessék.
 
new Float:x[MAX_PLAYERS],Float:y[MAX_PLAYERS],Float:z[MAX_PLAYERS];
enum pInfo
{
pPozicio,
}
public OnPlayerDisconnect(playerid, reason)
{
        dini_IntSet(file,\"Pozicio\",GetPlayerPos(playerid,x[playerid],y[playerid],z[playerid]));
}
//register parancs alá
        dini_IntSet(file,\"Pozicio\",GetPlayerPos(playerid,x[playerid],y[playerid],z[playerid]));
//login parancs alá
         SetPlayerPos(playerid,x[playerid],y[playerid],z[playerid]);

 

FloatSet kell.

Pozíció elmentése kilépsnél
« Válasz #14 Dátum: 2012. szeptember 13. - 06:30:42 »
0 Show voters
//betöltésnél
new Float:X,
Float:Y,
Float:Z,
Float:A,
file[100];
if(fexist(file)) {
    format(file, sizeof(file), \"ladmin/users/%s.sav\", PlayerName(playerid));
   
sscanf(dini_Get(file, \"Position\"), \"p<,>ffff\", X, Y, Z, A);
SetPlayerPos(playerid, X, Y, Z);
SetPlayerFacingAngle(playerid, A);
}
//
public OnPlayerDisconnect(playerid, reason) {
new Float:Pos[4],
    string[128],
    file[100];
if(!IsPlayerInAnyVehicle(playerid)) {
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
GetPlayerFacingAngle(playerid, Pos[3]);
} else {
    GetVehiclePos(GetPlayerVehicleID(playerid), Pos[0], Pos[1], Pos[2]);
GetVehicleZAngle(GetPlayerVehicleID(playerid), Pos[3]);
}
format(string, sizeof(string), \"%.4f,%.4f,%.4f,%.4f\", Pos[0], Pos[1], Pos[2], Pos[3]);
format(file, sizeof(file), \"ladmin/users/%s.sav\", PlayerName(playerid));
if(fexist(file)) dini_Set(file, \"Position\", string);
return 1;
}
stock PlayerName(playerid) {
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
return name;
}

 
sscanf plugin kell hozzá. :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal