Beiträge von Crank93

    ich glaub das könte dir weiterhelfen:


    stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance) { //Credits to Y_Less
    new
    vid=GetPlayerVehicleID(playerid),
    Float:a;
    if (vid) {
    GetVehiclePos(vid,x,y,a);
    GetVehicleZAngle(vid, a);
    }
    else {
    GetPlayerPos(playerid, x, y, a);
    GetPlayerFacingAngle(playerid, a);
    }
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));
    }


    damit bekomste den punkt, der sich genau um den wert "distance" vorm gesicht (oder fahrzeug) des spielers befindet. (funktion ist nicht von mir ^^ ).

    so, auf ein neues :thumbup:



    #define MAX_VEHICLES_PER_PLAYER (1) //beliebig editieren...


    //oben
    new spawned_vehicles[MAX_PLAYERS];
    new vehID[MAX_PLAYERS][MAX_VEHICLES_PER_PLAYER];


    //OnDialogResponse
    if(dialogid==deineID)
    {
    if(spawned_vehicles[playerid]==MAX_VEHICLES_PER_PLAYER)
    {
    DestroyVehicle(vehID[playerid][spawned_vehicles[playerid]-1]);
    vehID[playerid][spawned_vehicles[playerid]-1]=CreateVehicle(...deine_daten);


    }
    else
    {
    spawned_vehicles[playerid]++;
    vehID[playerid][spawned_vehicles[playerid]-1]=CreateVehicle(...deine_daten);
    }
    }

    naja, hier mal ein paar grundlagen:


    ich würde zuerst eine liste mit allen spielerdaten (enum), die du brauchst, erstellen, z.B:



    enum e_player_info
    {
    pPassword[32],
    pMoney,
    pScore,
    pAdmin //usw, halt alles, was du speichern (und laden) willst...
    };


    dann brauchst du ne globale variable, in der genug platz für jeden spieler ist.


    new g_PlayerInfo[MAX_PLAYERS][e_player_info]; //so, nun können hier die obigen daten für jeden spieler gespeichert werden.


    wenn jetzt der spieler den server betritt, werden seine daten aus seiner .ini file geladen:



    //OnPlayerConnect
    new pname[MAX_PLAYER_NAME], pfile[100];
    GetPlayerName(playerid, pname, sizeof(pname)); //name in pname gespeichert
    format(file, sizeof(file), "Userfiles\%s.ini", pname); //evtl. Pfad ändern
    //so, jetzt die daten aus der datei in das array:
    g_PlayerInfo[playerid][pPassword]=dini_Get(file, "Password");
    g_PlayerInfo[playerid][pMoney]=dini_Get(file, "Money");
    //usw...


    so, wenn der spieler den server verlässt, sollen die daten gespeichert werden:



    //OnPlayerDisconnect
    new pname[MAX_PLAYER_NAME], pfile[100];
    GetPlayerName(playerid, pname, sizeof(pname)); //name in pname gespeichert
    format(file, sizeof(file), "Userfiles\%s.ini", pname); //evtl. Pfad ändern
    dini_IntSet(file, "Money", GetPlayerMoney(playerid));
    dini_IntSet(file, "Score", GetPlayerScore(playerid));
    //usw...


    #define MAX_VEHICLES_PER_PLAYER (1) //beliebig editieren...


    //oben
    enum e_veh_info
    {
    spawned_vehicles,
    vehID[MAX_VEHICLES_PER_PLAYER]
    };
    new veh_info[MAX_PLAYERS][e_veh_info];


    //OnDialogResponse
    if(dialogid==hierdeindialog)
    {
    if(veh_info[playerid][spawned_vehicles]==MAX_VEHICLES_PER_PLAYER)
    {
    DestroyVehicle(veh_info[playerid][vehID[spawned_vehicles-1]]);
    veh_info[playerid][vehID[spawned_vehicles-1]]=CreateVehicle(...deine_daten);

    }
    else
    {
    veh_info[playerid][spawned_vehicles]++;
    veh_info[playerid][vehID[spawned_vehicles-1]]=CreateVehicle(...deine_daten);
    }
    }


    so, das sollte jetzt funktionieren, du kannst mit dem define die maximale anzahl an fahrzeugen bestimmen, die ein spieler spawnen kann.
    wählt der spieler dann im dialog ein fahrzeug aus, wird überprüft, ob er es überhaupt noch spawnen darf. wenn ja, wird das fahrzeug erstellt, wenn nein, wird das zuletzt erstellte fahrzeug zerstört und das neue dann erstellt.


    #define MAX_VEHICLES_PER_PLAYER (1) //beliebig editieren...


    //oben
    enum e_veh_info
    {
    spawned_vehicles,
    vehID[MAX_VEHICLES_PER_PLAYER]
    };
    new veh_info[MAX_PLAYERS][e_veh_info];


    //OnDialogResponse
    if(dialogid==hierdeindialog)
    {
    if(veh_info[playerid][spawned_vehicles]==MAX_VEHICLES_PER_PLAYER])
    {
    DestroyVehicle(veh_info[playerid][vehID[random(MAX_VEHICLES_PER_PLAYER]]-1);
    veh_info[playerid][vehID[spawned_vehicles]]=CreateVehicle(...deine_daten);

    }
    else
    {
    veh_info[playerid][vehID[spawned_vehicles]]=CreateVehicle(...deine_daten);
    veh_info[playerid][spawned_vehicles]++;
    }
    }

    dini_FloatSet(Spielerdatei,"posx",Spieler[playerid][posx]);
    dini_FloatSet(Spielerdatei,"posy",Spieler[playerid][posy]);
    dini_FloatSet(Spielerdatei,"posz",Spieler[playerid][posz]);

    if(strcmp("/sanfierro", cmdtext, true, 10) == 0)
    {
    if(Spieler[playerid][adminlevel] >= 1)
    {
    if(!IsPlayerInAnyVehicle(playerid))
    {
    SetPlayerPos(playerid,-1981.2587,137.4339,27.6875);
    SetPlayerFacingAngle(playerid,92.3396);
    }
    else
    {
    new vehid=GetPlayerVehicleID(playerid);
    SetVehiclePos(vehid,-1981.2587,137.4339,27.6875);
    SetVehicleZAngleAngle(vehid,92.3396);
    PutPlayerInVehicle(playerid, vehid, 0);
    }

    return 1;
    }

    falsch?
    komischerweise bekommt er seine errors und warnings nur bei den PVar-Funktionen und beim OnVehicleDamageStatusUpdate-Callback.


    beides wurde mit 0.3a R5 eingeführt.
    da ist mein vorschlag doch naheliegend, oder? :huh: