Beiträge von Jeffry

    #include <mSelection>


    Unter den Includes:
    new skinlist = mS_INVALID_LISTID;


    OnGameModeInit:
    skinlist = LoadModelSelectionMenu("skins.txt");
    (Die skins.txt findest du hier: http://gta-sa-mp.de/stuff/mSelection/skins.txt)


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == skinChangePickup)
    {
    ShowModelSelectionMenu(playerid, skinlist, "Select Skin");
    return 1;
    }
    return 0;
    }


    public OnPlayerModelSelection(playerid, response, listid, modelid)
    {
    if(listid == skinlist)
    {
    if(response)
    {
    SendClientMessage(playerid, 0xFF0000FF, "Skin Changed");
    SetPlayerSkin(playerid, modelid);
    //Geld hier abziehen.
    }
    else SendClientMessage(playerid, 0xFF0000FF, "Canceled skin selection");
    return 1;
    }
    return 1;
    }


    Ist in etwa der Code vom Beispiel.

    Ja, kannst du schon machen.
    Du mappst dir einen Laden hin, da setzt du einen Checkpoint oder ein Pickup in, wenn man in das rein läuft, dann öffnet sich das Menü (zum Beispiel das aus dem ersten (oder zweiten) Link den ich dir gegeben habe. So könnte ich mir das vorstellen.

    Ohh oh fail :pinch:
    Das steht ja in keiner Schleife. Manchmal sieht man den Wald vor lauter Bäumen nicht, dafür gibt es zum Glück Logs.
    format(str_aut, sizeof(str_aut), "Fahrzeugname: %s\n", str_aut, CarName[PlayerCar[playerid][slot][CarModel]-400]);
    zu:
    format(str_aut, sizeof(str_aut), "Fahrzeugname: %s\n", CarName[PlayerCar[playerid][slot][CarModel]-400]);

    Aber dann stimmt doch alles. Es müsste dir der Dialog angezeigt werden.
    Kannst es ja mal so versuchen:
    if(strcmp("/freikaufen", cmdtext, true) == 0)
    {
    new str_aut[512], slot = Dtc_PlayerKey[playerid];
    printf("playerid: %d slot %d -> %d", playerid, slot, PlayerCar[playerid][slot][Abgeschleppt]);
    if(PlayerCar[playerid][slot][Abgeschleppt] == 1)
    {
    printf("abgeschleppt");
    format(str_aut, sizeof(str_aut), "Fahrzeugname: %s\n", str_aut, CarName[PlayerCar[playerid][slot][CarModel]-400]);
    printf("Zeige Dialog: %s", str_aut);
    ShowPlayerDialog(playerid, DIALOG_FREIKAUFEN, DIALOG_STYLE_MSGBOX, "Information", string, "Freikaufen", "Abbrechen");
    }
    else
    {
    printf("Nicht abgeschleppt");
    SendClientMessage(playerid, 0xFF0000FF, "Error: Fahrzeug ist nicht abgeschleppt, wechsele den Schlüssel.");
    }
    return 1;
    }
    Was steht dann im Log?

    Ok, dann ändere im /opark:
    new Carowner = GetDtCarOwner(trailercar);
    new slot = GetDtCarOwnerSlot(Carowner,trailercar);
    zu:
    new Carowner = GetDtCarOwner(trailercar);
    new slot = GetDtCarOwnerSlot(Carowner,trailercar);
    printf("Abgeschleppt: %d slot %d", Carowner, slot);


    Und bei /freikaufen:
    if(PlayerCar[playerid][slot][Abgeschleppt] == 1)
    zu:
    printf("playerid: %d slot %d -> %d", playerid, slot, PlayerCar[playerid][slot][Abgeschleppt] );
    if(PlayerCar[playerid][slot][Abgeschleppt] == 1)


    Was steht dann im Server Log, wenn du beide Befehle eingibst?

    stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Baned",dini_Int(Spielerdatei,"Baned"));
    SetPVarInt(playerid,"Führerschein",dini_Int(Spielerdatei,"Führerschein"));
    SetPVarInt(playerid,"Skin",dini_Int(Spielerdatei,"Skin"));
    SetPlayerWantedLevel(playerid, dini_Int(Spielerdatei,"WantedLevel"));
    if(GetPVarInt(playerid,"Baned")==1)
    {
    SendClientMessage(playerid,Rot,"Du bist vom Server gebannt.");
    Kick(playerid);
    }
    SetPVarInt(playerid,"loggedin",1);
    return 1;
    }


    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned"));
    dini_IntSet(Spielerdatei,"Führerschein",GetPVarInt(playerid,"Führerschein"));
    dini_IntSet(Spielerdatei,"WantedLevel",GetPlayerWantedLevel(playerid));
    dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));
    }
    return 1;
    }


    Bei OnPlayerSpawn:
    SetPlayerSkin(playerid, GetPVarInt(playerid,"Skin"));

    Die zwei/drei (falls mit Nachricht) Zeilen:
    SetPlayerPos(playerid, 770.8033,-0.7033,1000.7267);
    SetPlayerInterior(playerid, 5);


    zu:
    OnPlayerCommandText(playerid, "/setloc 770.8033 -0.7033 1000.7267 5");


    Wenn es mit dem Befehl geht, müsste es ja so klappen.
    Wenn nicht, dann kannst du ja mal /save und /interior machen, ob bei /save die gleichen Koordinaten stehen.

    Nichts passiert? Die Nachricht "Freigekauft." kommt aber, oder?


    Du musst die Koordinaten hier auch ändern:
    SetVehiclePos(PlayerCar[playerid][slot][CarId], 9999.0, -9999.0, -200.0);
    Dort müssen jeweils die gleichen Koordinaten rein, wie darunter in die Variablen gepackt werden, sprich die aus dem /save.

    Aha, du arbeitest gar nicht mit der PVar beim Wanted-Level-Vergeben.
    Schreibe die beiden Funktionen so:
    stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Baned",dini_Int(Spielerdatei,"Baned"));
    SetPVarInt(playerid,"Führerschein",dini_Int(Spielerdatei,"Führerschein"));
    SetPlayerWantedLevel(playerid, dini_Int(Spielerdatei,"WantedLevel"));
    if(GetPVarInt(playerid,"Baned")==1)
    {
    SendClientMessage(playerid,Rot,"Du bist vom Server gebannt.");
    Kick(playerid);
    }
    SetPVarInt(playerid,"loggedin",1);
    return 1;
    }


    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned"));
    dini_IntSet(Spielerdatei,"Führerschein",GetPVarInt(playerid,"Führerschein"));
    dini_IntSet(Spielerdatei,"WantedLevel",GetPlayerWantedLevel(playerid));
    }
    return 1;
    }

    Du hast nur die Variable auf 310 gesetzt, nicht aber das Textdraw. Du könntest das PlayerTextDrawSetString auch dort machen, spielt im Endeffekt keine Rolle.
    Deshalb hat auch alles funktioniert, bis auf die Anzeige in der ersten Sekunde.

    Ok, ich geb dir nicht alles auf einmal, weil ich es ja nicht prüfen kann und nicht kompilieren kann, daher Schritt für Schritt.
    Teste es erst mal so:
    if(strcmp("/freikaufen", cmdtext, true) == 0)
    {
    new string[512], slot = Dtc_PlayerKey[playerid];
    if(PlayerCar[playerid][slot][Abgeschleppt] == 1)
    {
    format(string, sizeof(string), "Fahrzeugname: %s\n", string, CarName[PlayerCar[playerid][slot][CarModel]-400]);
    ShowPlayerDialog(playerid, DIALOG_FREIKAUFEN, DIALOG_STYLE_MSGBOX, "Information", string, "Freikaufen", "Abbrechen");
    }
    else SendClientMessage(playerid, 0xFF0000FF, "Error: Fahrzeug ist nicht abgeschleppt, wechsele den Schlüssel.");
    return 1;
    }


    OnDialogResponse:
    if(dialogid == DIALOG_FREIKAUFEN)
    {
    static place;
    new slot = Dtc_PlayerKey[playerid];
    switch(place)
    {
    case 0:
    {
    //Bei "CarId" muss das rein, was bei CreateVehicle vom PlayerCar steht.
    SetVehiclePos(PlayerCar[playerid][slot][CarId], 1111.1, 1111.1, 111.1);
    PlayerCar[playerid][slot][CarPos_x] = 1111.1;
    PlayerCar[playerid][slot][CarPos_y] = 1111.1;
    PlayerCar[playerid][slot][CarPos_z] = 111.1;
    PlayerCar[playerid][slot][CarRotate] = 0.0;
    place = 1;
    }
    case 1:
    {
    //Bei "CarId" muss das rein, was bei CreateVehicle vom PlayerCar steht.
    SetVehiclePos(PlayerCar[playerid][slot][CarId], 2222.2, 2222.2, 222.2);
    PlayerCar[playerid][slot][CarPos_x] = 2222.2;
    PlayerCar[playerid][slot][CarPos_y] = 2222.2;
    PlayerCar[playerid][slot][CarPos_z] = 222.2;
    PlayerCar[playerid][slot][CarRotate] = 0.0;
    place = 2;
    }
    case 2:
    {
    //Bei "CarId" muss das rein, was bei CreateVehicle vom PlayerCar steht.
    SetVehiclePos(PlayerCar[playerid][slot][CarId], 3333.3, 3333.3, 333.3);
    PlayerCar[playerid][slot][CarPos_x] = 3333.3;
    PlayerCar[playerid][slot][CarPos_y] = 3333.3;
    PlayerCar[playerid][slot][CarPos_z] = 333.3;
    PlayerCar[playerid][slot][CarRotate] = 0.0;
    place = 0;
    }
    }
    PlayerCar[playerid][slot][Abgeschleppt] = 0;
    OnPlayerCarUpdate(playerid,false);
    return SendClientMessage(playerid, 0xFFFFFFFF, "Freigekauft.");
    }
    Es ist dann so, dass er immer von Parkplatz 1 bis 3 durchrotiert.
    Teste das mal so aus, ob das mit dem Freikauf klappt, soweit natürlich. Die Koordinaten musst du anpassen. Wenn das klappt, poste den Code mit den neuen Koordinaten wieder.


    Nicht vergessen DIALOG_FREIKAUFEN zu definieren.