Gespeicherte Position laden?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • nabend leute;


    wie kann ich aus einer .ini datei informationen wieder laden?
    d.h. ein spieler tippt /savepos ein. nun werden seine cords gespeichert, soweit bin ich auch schon:


    if(!strcmp(cmdtext,"/savepos"))
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    new Float:xx, Float:yy, Float:zz, save[512];
    GetPlayerPos(playerid,xx,yy,zz);
    format(save,sizeof(save),"%s pos.txt",name);
    dini_IntSet(save, "-----------------------", 1);
    dini_FloatSet(save,"X: %d",xx);
    dini_FloatSet(save,"Y: %d",yy);
    dini_FloatSet(save,"Z: %d",zz);
    SendClientMessage(playerid, 0x00C600FF, "Deine Position wurde gespeichert! Benutze /loadpos, um sie wieder zu laden");
    return 1;
    {


    wie mache ich das, wenn ich /loadpos eintippe, das ich dann wieder an den gespeicherten cords lande?


    mfg xXganzereuroXx

  • eig nur für einem moment, die datei soll nach dem /loadpos wieder gelöscht ewrden, wenn das geht.


    so mein cih dass:


    max musterman gibt /savepos ein
    daraufhin werden seine position gespeichert
    max mustermann bibt /loadpos ein
    daraufhin kehrt er zu der position zurück, die er gespeichert hat
    die datei mit den gespeicherten cords von ihm wird nun gelöscht.

  • Und für was das dann in einer Datei speichern?


    new Float:x[MAX_PLAYERS],Float:y[MAX_PLAYERS],Float:z[MAX_PLAYERS] //ganz oben ins script
    //beim /savecord befehl:
    GetPlayerPos(playerid,x[playerid],y[playerid],z[playerid]);
    //beim /loadcord befehl:
    SetPlayerPos(playerid,x[playerid],y[playerid],z[playerid]);


    so dürfte es gehen :)

  • so also als erstes, mach es in eine richtige DB rein.
    ich würde es wie folgt regeln:


    new
    SavedLoc,
    query[100],
    Float:x,
    Float:y,
    Float:z;


    SavedLoc = db_open("SavedLocation");
    GetPlayerPos(playerid,x,y,z);
    format(query,sizeof(query),"INSERT INTO SavedLocation (%i,%f,%f,%f);",playerid,x,y,z);// Db Struktur playerid,X,Y,Z ,
    db_query(SavedLoc,query); Zum speichern und :



    public GoToSavedLoc(playerid){
    new
    SavedLoc,
    queryx[100],
    queryy[100],
    queryz[100],
    DBResult:x,
    DBResult:y,
    DBResult:z,
    X[20],
    Y[20],
    Z[20];


    SavedLoc = db_open("SavedLocation");


    // Formatieren der Query's für die Coords, da ich die Coords von der ausgelesenen playerid gewünscht sind oder ?
    format(queryx,sizeof(queryx),"SELECT x FROM SavedLocation WHERE playerid=%s"),playerid);
    format(queryy,sizeof(queryy),"SELECT y FROM SavedLocation WHERE playerid=%s"),playerid);
    format(queryz,sizeof(queryz),"SELECT z FROM SavedLocation WHERE playerid=%s"),playerid);
    //Ende hiervon


    // Wir brauchen ein Result um mit db_get_field _assoc zu arbeiten, das erzeuge ich hier mit den vorher formatierten Query's
    x= db_query(SavedLoc,queryx);
    y= db_query(SavedLoc,queryy);
    z= db_query(SavedLoc,queryz);
    // Ende hiervon


    // Ergebnisse in CoordBuchstaben in groß Speichern (X,Y,Z)
    db_get_field_assoc(x,"x",X,sizeof(X));
    db_get_field_assoc(y,"y",Y,sizeof(Y));
    db_get_field_assoc(z,"z",Z,sizeof(Z));
    // Ende hiervon



    // Endprodukt
    SetPlayerPos(strval(x),strval(y),strval(z);}


    Wie man die gesavete Post updatet machst du dann noch selber, und was passiert wenn es gar keinen Eintrag gibt für den Spielernamen auch :>
    Ich will ja nicht alles vorrausnehmen..


    Und bei LogOff einfach den Eintrag wieder löschen UND SO WEITER :D


    EDIT: Meine PWN-Code Convertierung hat beim 2. Teil nichts eingerückt deswegen Plain text

    12 Mal editiert, zuletzt von nato ()

  • wiso wilslt du ne ini erstellen? reicht doch ne funktion,
    //Savep //Loadp //oben hin
    new Float:PosX[MAX_PLAYERS], Float:PosY[MAX_PLAYERS], Float:PosZ[MAX_PLAYERS], Float:PosA[MAX_PLAYERS], PosI[MAX_PLAYERS];
    if (strcmp(cmdtext, "/savep", true)==0)
    {
    GetPlayerPos(playerid, PosX[playerid], PosY[playerid], PosZ[playerid]);
    GetPlayerFacingAngle(playerid, PosA[playerid]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, ".:SERVER:. Position gespeichert! Du kannst sie mit /loadp Laden.");
    PosI[playerid] = (GetPlayerInterior(playerid));
    PlayerPlaySound(playerid, 1137 , 0.0, 0.0, 0.0);
    return 1;
    }
    //=======================================================================================//
    if (strcmp(cmdtext, "/loadp", true)==0)
    {
    if (!floatsqroot(PosX[playerid]+PosY[playerid]+PosZ[playerid]))
    {
    return SendClientMessage(playerid, COLOR_RED, "[ERROR:] Benutze /savep Als erstes!");
    }
    else
    {
    ResetPlayerWeapons(playerid);
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    SetVehiclePos(GetPlayerVehicleID(playerid), PosX[playerid], PosY[playerid], PosZ[playerid]);
    SetVehicleZAngle(GetPlayerVehicleID(playerid), PosA[playerid]);
    SetCameraBehindPlayer(playerid);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid), PosI[playerid]);
    }
    else
    {
    InCar[playerid] = false;
    SetPlayerPos(playerid, PosX[playerid], PosY[playerid], PosZ[playerid]);
    SetPlayerFacingAngle(playerid, PosA[playerid]);
    SetCameraBehindPlayer(playerid);
    }
    PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
    SetPlayerInterior(playerid, PosI[playerid]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, ".:SERVER:. Gespeicherte Position Geladen!");
    }
    }
    return
    SendClientMessage(playerid, COLOR_MULTIRED, "Dieser Befehl exestiert nicht. Benutze /Help oder /Teles");


    }


    wiso so kompliziert=?

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

  • @multivan wenn ich deine variante benutze, hängt sich mein PAWN compiler auf....-.-
    ich habe es einwenig umgeschrieben, und so:


    if (strcmp(cmdtext, "/savepos", true)==0)
    {
    GetPlayerPos(playerid, PosX[playerid], PosY[playerid], PosZ[playerid]);
    GetPlayerFacingAngle(playerid, PosA[playerid]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, ".:SERVER:. Position gespeichert! Du kannst sie mit /loadpos Laden.");
    PosI[playerid] = (GetPlayerInterior(playerid));
    PlayerPlaySound(playerid, 1137 , 0.0, 0.0, 0.0);
    return 1;
    }
    if (strcmp(cmdtext, "/loadpos", true)==0)
    {
    if (!floatsqroot(PosX[playerid]+PosY[playerid]+PosZ[playerid]))
    {
    return SendClientMessage(playerid, COLOR_RED, "[ERROR:] Benutze /savep Als erstes!");
    }
    else
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    SetVehiclePos(GetPlayerVehicleID(playerid), PosX[playerid], PosY[playerid], PosZ[playerid]);
    SetVehicleZAngle(GetPlayerVehicleID(playerid), PosA[playerid]);
    SetCameraBehindPlayer(playerid);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid), PosI[playerid]);
    }
    else if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
    {
    SetPlayerPos(playerid, PosX[playerid], PosY[playerid], PosZ[playerid]);
    SetPlayerFacingAngle(playerid, PosA[playerid]);
    SetCameraBehindPlayer(playerid);
    }
    PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
    SetPlayerInterior(playerid, PosI[playerid]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, ".:SERVER:. Gespeicherte Position Geladen!");
    return 1;
    }
    }


    funktioniert es, nochmals danke für die hilfe
    mfg xXganzereuroXx