Beiträge von Douq

    Du könntest theoretisch SetPlayerMarkerForPlayer auch dafür verwenden, Spieler nicht zu markieren. Sprich alle die in der Fraktion sind machst du (z.B.) Gelb, alle anderen weiß (mit dem Alpha-Code 00). Ob das jetzt so sinnig ist, lass ich mal im Raum stehen.


    Wenn mein Ansatz, den ich oben genannt habe nicht funktioniert hat, wirst du woanders SetPlayerColor() noch verwenden, wodurch die Spieler wieder sichtbar werden.

    Schau mal diese beiden Funktionen an


    [wiki]ShowPlayerMarkers[/wiki] [wiki]LimitPlayerMarkerRadius[/wiki] hast du die eventuell drin? Die Entfernen oder ggf. den Wünschen nach anpassen

    SetPlayerMarkerForPlayer( SPIELERID (DIE DIE VERÄNDERUNG SEHEN SOLL), SPIELERID (DIE, DEREN FARBE SICH ÄNDERN SOLL), FARBECODE)


    Du müsstest also einfach durch alle Spieler loppen, die Online sind + in deiner Fraktion sind, beispielsweise so:


    Code
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    	if(!IsPlayerConnected(i) || playerInfo[i][pFraktion] != playerInfo[playerid][pFraktion]) continue;
    	SetPlayerMarkerForPlayer(playerid, i, 0xF6FF00FF);
    }

    Dadurch wären alle Fraktionsmitglieder, die zu diesem Zeitpunkt online sind, Gelb.

    Kannst auch folgendes machen:


    Und dann folgend drauf zugreifen (Anwendungsbeispiel):


    SetPlayerPos(playerid, Fraktion[5][sX][0],Fraktion[0][sY][0], Fraktion[5][sZ][0]);

    Du musst per [wiki]format[/wiki] den string erst einmal formatieren und dann die Variable als Parameter angeben.


    Beispiel:

    Code
    new str[15];
    format(str, 15, "Du bist %s", "toll");
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Du bist ..", str, "Button 1", "Button 2");

    Da ist nämlich der Fehler! Probier es mal mit dieser Funktion:

    Code
    getFreeCarID()
    {
        for(new i=0; i<sizeof(cInfo); i++)
        {
            if(cInfo[i][db_id]==0)return i;
        }
        return -1;
    }

    Und setze folgende Abfrage noch unter deiner Deklaration von id (bei OnPlayerCarsLoad):



    if(id == -1) return printf("Das FahrzeugLimit wurde erreicht.");

    Dann zeig mal den Code von getFreeCarID(). Sind die drei Fahrzeuge alle in der Datenbank? Du scheinst nämlich immer nur den ersten Index zu verwenden -> ergo deine getFreeCarID() könnte die Fehlerursache sein.

    Hast du denn überhaupt auch so viele Fahrzeuge? Würde behaupten cInfo hat eine Größe von 200 und die restlichen Einträge sind einfach nicht geladen. Du kannst dir sonst einfach per

    Code
    if(!cInfo[id][model]) continue;


    die restlichen Abfragen ersparen (bei deinem Code vor 7).


    Aus dem Code geht die Vermutung zurück, dass die FahrzeugID in der Variable nicht mit der übereinstimmt, in welcher du sitzt. Ist es denn überhaupt richtig, dass du derzeit nur ein Fahrzeug auf dem Server hast?


    Um die Vermutung zu bestätigen einfach mal:


    Kann es sein, dass du eventuell irgendwo das Fahrzeug löscht und neuerstellst und vergisst, die ID zu übernehmen?

    Was meinst du denn mit meckern?



    Füg mal diesen Code hinzu und poste dann, was die Console ausgibt. Am besten zeigst du dazu noch zusätzlich deinen jetzigen Stand von deinem /motor Befehl.

    Super das klappt schonmal. Ein kleines Problem habe ich nun noch. Sobald die Fahrzeuge freigekauft wurden, ich in diese einsteige und ein wenig fahre und das Fahrzeug dann verlasse spawnt es sofort wieder.

    Der letzte Parameter bei CreateVehicle() gibt den respawn delay in Sekunden an. Du hast ihn auf 1, ergo respawnt das Fahrzeug nach einer Sekunde. Entweder die Zeit beliebig hoch stellen oder auf -1, dann respawnen die Fahrzeuge nicht.

    Sorry für die Einrückung, klappt bei mir irgendwie nicht wirklich.

    Okay, was mir jetzt so auffällt:

    • In deiner Abfrage in Zeile 7 musst du noch zusätzlich abfragen, ob das Fahrzeug gesperrt ist bzw. in deinem Fall ob es nicht gesperrt ist.
    • Zeile 25 sendest du einen Query und setzt c_gesperrt auf 1, das ist sicherlich falsch oder?
    • Zeile 27 ist theoretisch unnötig, da du in Zeile 23 den Wert auf 0 setzt und es in keinem Fall einen anderen Wert als 0 haben kann.
    • In Zeile 16 muss der Platzhalter von %s zu %d, da es eine Zahl ist.

    Denke Punkt 1 wird dein Problem lösen

    ich meine ob mann das mit eine abfrage machen kann an stadt mit 21 abfragen für alle jobs sonst muss ich die jewalz einzelnt eintragen MfG

    Naja angenommen du fügst deinem Array vFahrzeug noch beispielsweise die Variable "vehicleJobID" hinzu, könntest du ganz einfach per isPlayerInJob(playerid, vFahrzeug[vehicleid][vehicleJobID]) abfragen. Müsstest du halt nur die jeweilige jobID beim Erstellen des Fahrzeuges setzen.

    Was meinst du mit erstellen? Die dargestellte Problematik, zumindestens mit der Anzeige, sollte damit behoben sein. Verstehe deine Problematik gerade nicht, kannst du die näher erläutern? Sollten Probleme beim Freikaufen entstehen, brauchen wir auch sämtlichen Code unter OnDialogResponse innerhalb der dialogid Abfrage zu DIALOG_CARFREIKAUFEN_AUSWAHL.

    Sofern "id" in der Datenbank als primary key eingetragen ist, kannst du diese als Gebäudekomplex ID verwenden. Wäre dann zumindestens eindeutig zuordenbar .

    Sobald c_gesperrt nicht gleich 1 ist, brichst du durch das return auch die Schleife ab. Entferne Zeile 13 - 16. Dann, außerhalb der Schleife überprüfst du einfach ob die Variable string per strlen leer ist -> dann zeigst du die Fehlermeldung an.