GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: narancs741 - 2012. Szeptember 12. - 16:22:50

Cím: Pozíció elmentése kilépsnél
Írta: narancs741 - 2012. Szeptember 12. - 16:22:50
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]
Cím: Pozíció elmentése kilépsnél
Írta: Extasy449 - 2012. Szeptember 12. - 16:33:22
Használsz valamilyen adatbázis kezelõ plugint?
Cím: Pozíció elmentése kilépsnél
Írta: narancs741 - 2012. Szeptember 12. - 16:38:13
Nem.
Cím: Pozíció elmentése kilépsnél
Írta: _I[TM]I_Dexter[CL] - 2012. Szeptember 12. - 16:47:21
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:
Cím: Pozíció elmentése kilépsnél
Írta: narancs741 - 2012. Szeptember 12. - 18:55:48
És milyen módon?
Cím: Pozíció elmentése kilépsnél
Írta: JackBronson - 2012. Szeptember 12. - 19:01:55
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)
Cím: Pozíció elmentése kilépsnél
Írta: Rupert - 2012. Szeptember 12. - 19:05:30
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.
Cím: Pozíció elmentése kilépsnél
Írta: JackBronson - 2012. Szeptember 12. - 19:07:31
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
Cím: Pozíció elmentése kilépsnél
Írta: Mokus - 2012. Szeptember 12. - 19:29:45
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]);
Cím: Pozíció elmentése kilépsnél
Írta: Depi - 2012. Szeptember 12. - 19:45:23
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.
Cím: Pozíció elmentése kilépsnél
Írta: narancs741 - 2012. Szeptember 12. - 20:03:14
Szóval akkor összegezve mit cinsáljak? Le irnátok?
Egyébként amit Mókus irt az nem jó :/
Cím: Pozíció elmentése kilépsnél
Írta: Mokus - 2012. Szeptember 12. - 20:08:08
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
Cím: Pozíció elmentése kilépsnél
Írta: narancs741 - 2012. Szeptember 12. - 21:19:18
Még mindig nem találtam meg a megfelelõ leírást!
Cím: Pozíció elmentése kilépsnél
Írta: N@rbirock - 2012. Szeptember 12. - 21:31:32
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.
Cím: Pozíció elmentése kilépsnél
Írta: TengeriMalac - 2012. Szeptember 13. - 06:30:42
//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á. :)