Beiträge von Jeffry

    Wahrscheinlich hast du aus versehen an einem anderen Textdraw die ID Textdraw0 genommen, anstatt die zu dem anderen gehörigen.


    Suche mal nach Textdraw0, ob das noch irgendwo im Code steht, an einer Stelle wo es nicht hingehört.


    -1 wird vermutlich jedesmal eine andere Farbe darstellen (wie bei den Fahrzeugen mit der Farbe -1)


    Die -1 steht wie bei SendClientMessage bei HEX Codes als weiß (0xFFFFFFFF). ;)

    stock ShowVehicleInfoData(playerid, selecteditem)
    {
    new str[512],rnd=random(2500);
    selecteditem = selecteditem + (21 * (GetPVarInt(playerid, "vspawner_page") - 1));
    format(str,sizeof str,"{FFFFFF}Du hast folgendes Fahrzeug ausgewählt.\n\nName: {00FF00}%s\n{FFFFFF}Importkosten: {FF0000}%s{FFFFFF}€\n{FFFFFF}Kostenaufschlag (für die Lieferanten): {FF0000}%s{FFFFFF}€\n\nGesamtkosten: {FF0000}%s{FFFFFF}€",PlayerVehicle[gItemList[selecteditem]-400],inspoints(DealerVehPrice[selecteditem]),inspoints(rnd),inspoints(DealerVehPrice[selecteditem]+rnd));
    SetPVarInt(playerid,"ImportVeh",selecteditem);
    SetPVarInt(playerid,"Lieferkosten",rnd);
    ShowPlayerDialog(playerid,DLG_AH_IMPORTCAR,DIALOG_STYLE_MSGBOX,"Fahrzeug importieren",str,"Import","Abbrechen");
    return 1;
    }


    Das sollte schon genügen.

    Setzt du denn die Standard-Werte für diese beiden Variablen zu -1? Wenn nein, dann kann das nicht klappen, weil:
    DestroyPickup(HausInfo[id][h_pickup]);
    Delete3DTextLabel(HausInfo[id][h_text]);
    Beide Variablen sind zu Beginn 0. Dann erstellst du ein Haus => Label ID ist 0 und Pickup ID ist 0 (jeweils das erste im Server).


    => Nächstes Haus löscht wieder die beiden 0's, also ist das erste Haus wieder weg....und so weiter. So bleibt nur das letzte Haus übrig.



    Entweder du entfernst die beiden Zeilen (macht ja eh keinen Sinn, wenn du es nur beim Server-Start ausführst), oder du setzt vor dem Laden der Häuser die beiden Variablen zu -1:
    for(new i=0;i<sizeof(HausInfo);i++)
    {
    HausInfo[i][h_pickup] = -1;
    HausInfo[i][h_text] = Text3D:-1;
    }


    Dann sollte es klappen.

    Das ist nur wenn das Haus eine Sperre hat 8|


    Nö, das hast du bei allen drei Möglichkeiten so:
    if(HausInfo[id][h_sperre]==1)
    {
    format(hausstring, sizeof(hausstring), "|=== %s (%i) ===|\n{FF0A00}Diese Immobilie ist gesperrt!", HausInfo[id][h_beschreibung], id);
    HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    }
    else
    {
    if(HausInfo[id][h_owned]==0)
    {
    format(hausstring, sizeof(hausstring), "|=== %s (%i) ===|\nKaufpreis: %d$\n/hauskaufen", HausInfo[id][h_beschreibung], id, HausInfo[id][h_preis]);
    HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    }
    else
    {
    format(hausstring, sizeof(hausstring), "|=== %s (%i) ===|\nBesitzer: %s \nMietpreis: %d $\nMüll: %d \n/hausmieten", HausInfo[id][h_beschreibung], id, HausInfo[id][h_owner], HausInfo[id][h_mietpreis], HausInfo[id][h_muell]);
    HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    }
    }


    Bei den letzten zweien solltest du hausstring anstatt "" schreiben.


    Zwecks des neu Ladens: Ich rate dir ebenfalls den Server komplett neu zu starten und nicht nur /gmx zu machen, da das nicht alles zurücksetzt.

    Entenhausen, das weckt Erinnerungen :D


    Also, so sieht momentan dein Code aus (etwas vereinfacht):


    new veh=GetPlayerVehicleID(playerid);
    if(AHCarInfo[veh][aSeller] == pInfo[playerid][pAH]) {


    Jetzt sagen wir mal, du sitzt in Vehicle ID 125 (das Fahrzeug mit der "Objekt ID" 125). Dann versuchst du auf "AHCarInfo[125][aSeller]" zuzugreifen. Das mag zwar nicht direkt einen Fehler geben, dennoch wird es zu Problemen kommen, da dieses Fahrzeug sicher nicht das 125. aus den AHCarInfo-Cars ist. Deshalb müssen wir herausfinden, zu welchem Index (das wo jetzt die 125 steht) die 125 passt.
    Das machen wir hier:


    new idx;
    for(new v;v<MAX_SELLERCARS;v++) {
    if(AHCarInfo[v][aVeh] == veh) {
    idx=v;
    break;
    }
    }


    Wir schauen, welches "AHCarInfo[v][aVeh]" (wobei v = alle Werte von 0 bis MAX_SELLERCARS-1) den Wert "veh" (also 125, die "Objekt ID") hat.
    Wenn wir dann wissen, zu welchem "v" die 125 gehört, dann speichern wir "v" in "idx" damit wir später darauf zugreifen können. Sagen wir mal, das AHCar 7 hat die "Objekt ID" 125.
    Dann greifst du nun so auf das Fahrzeug zu: "AHCarInfo[idx][aSeller]" => entspricht: AHCarInfo[7][aSeller]


    Und bei Index 7 haben wir nun auch den korrekten Verkäufer, für das Fahrzeug welches zu fährst.


    Du musst über den Index (hier: 7) auf das Fahrzeug-Array (!) zugreifen, nicht über die "Objekt ID" (hier 125 / GetPlayerVehicleID). Willst du auf das Fahrzeug direkt zugreifen (zum Beispiel für SetVehicleColor) musst du wiederum die 125 nehmen.



    Fazit: Auf das Array mit dem Index zugreifen, auf das Fahrzeug selbst über die "Objekt ID" zugreifen.

    Du brauchst meine Funktionen nicht zu ändern, die wurden getestet und funktionieren so. Wenn du es änderst, werden nur weitere Fehler auftreten.
    Du kannst es in diesem bestimmten Fall zwar so machen, das wird dir aber in einem anderen Fall wieder Fehler bescheren.


    Hast du vor dem Befehl den Dialog offen gehabt?
    Wenn ja, hast du
    g_PlayerDialog[playerid] = -1;
    als erste Zeile in OnDialogResponse stehen?
    Wenn nein, füge das hinzu.

    new idx;
    for(new v;v<MAX_SELLERCARS;v++) {
    if(AHCarInfo[v][aVeh] == veh) {
    idx=v;
    break;
    }
    }
    Das muss vor den Check, bzw nach "new veh=...".
    Dann musst du die folgenden [veh] alle zu [idx] ändern.


    Du darfst nämlich nicht mit der vehicle id auf den Index zugreifen, sondern musst mit dem Index auf den Index zugreifen.

    for(new v;v<MAX_SELLERCARS;v++) {
    if(AHCarInfo[v][aSeller] == pInfo[playerid][pAH]) {
    format(str,sizeof str,"%s{FFFFFF}Fahrzeug: %s | Preis: %s€\n",str,PlayerVehicle[AHCarInfo[v][aModel]-400],inspoints(AHCarInfo[v][aPrice]);
    }
    }


    Zuvor dürftest du das Array gesprengt haben.


    Das listitem bei OnDialogResponse fragst du genauso ab:
    new tmp=-1;
    for(new v;v<MAX_SELLERCARS;v++) {
    if(AHCarInfo[v][aSeller] == pInfo[playerid][pAH]) {
    tmp++;
    if(tmp==listitem) //ausgewähltes Fahrzeug
    }
    }

    Jetzt hast du eine Menge erklärt, aber das eigentliche vergessen. Was willst du mit den Fahrzeugen im Autohaus eigentlich machen? Umparken, ja, aber was hat das mit der Nachricht zu tun die du da formatierst?


    Beschreibe bitte genau was du mit umparken meinst, und was dabei gemacht werden soll.


    Position ändern? Position speichern?...

    Zitat

    [22:32:23] [ERROR] CMySQLConnection::Connect - (error #2003) Can't connect to MySQL server on 'localhost' (10061)


    Ist der lokale MySQL Server an? Sieht nämlich nicht danach aus.


    Hast du einen anderen Code der auch eine Verbindung aufbauen will?
    Hast du es mal mit 127.0.0.1 anstatt localhost versucht?



    Und nebenbei:
    format(query,sizeof(query),"SELECT * FROM user WHERE name='%e'",GPlayerName(playerid));
    zu:
    mysql_format(db_handle,query,sizeof(query),"SELECT * FROM user WHERE name='%e'",GPlayerName(playerid));


    Bin jetzt weg, ich schaue mir deine Antwort morgen an.

    Sorry, habe dir den Fehler behoben (siehe Code oben).


    Wenn du die Position auch noch haben willst, schreibe es so:
    forward SetAllFrakVehiclesAngle();
    public SetAllFrakVehiclesAngle()
    {
    for(new i = 0; i < sizeof(LSPDcar); i++)
    {
    if(LSPDcar[i])
    {
    new bool:inside;
    for(new p=0; p<MAX_PLAYERS; p++) if(IsPlayerInVehicle(p, LSPDcar[i])) inside = true;
    if(!inside)
    {
    SetVehiclePos(LSPDcar[i],Fraktautos[i][1][fposx],Fraktautos[i][1][fposy],Fraktautos[i][1][fposz]);
    SetVehicleZAngle(LSPDcar[i],Fraktautos[i][1][fposa]);
    }
    }
    }
    return 1;
    }

    Das sind zu wenig Informationen.
    Du musst mysql_log auf LOG_ALL stellen, das printet zur Zeit nur die Errors.



    Versuche es aber vorerst mal so:
    db_handle = mysql_connect(mysql_host,mysql_user,mysql_data,mysql_pass);