Beiträge von Jeffry

    Was heißt denn überhaupt, der Spieler wird nicht gespeichert?
    Existiert zu dem Spieler denn ein Datensatz in der Tabelle, wenn nicht, dann wird er gar nicht angelegt (INSERT INTO), sprich an der Registration passt etwas nicht (Code posten).
    Wenn der Datensatz für den Spieler existiert, dann passt beim Speichern der Statistiken (UPDATE) etwas nicht (Code posten).


    Außerdem:
    Erstelle bitte nicht zwei Themen, die sich um das Gleiche Problem handeln.
    Siehe: Connecten werden nur Textdraws angezeigt aber kein DIALOG

    In der Klammer = max Wert
    Hinter der Klammer = min Wert

    Nein. random nimmt eine Zufallszahl von 0 bis zu der Zahl - 1, die in der Klammer steht.
    Das was danach steht wird nur dazu gerechnet, das hat damit nichts zu tun.


    Versuche es mal ohne die ganzen lokalen Deklarationen:
    forward VosaRob(playerid);
    public VosaRob(playerid)
    {
    printf("1");
    new str[145], money;
    if(GetPlayerHealth(playerid) < 1) return SendClientMessage(playerid, COLOR_ERROR, "Du bist gestorben, Raub abgebrochen!");
    if(PlayerInfo[playerid][pRob] >= 12)
    {
    printf("12");
    SendClientMessage(playerid, COLOR_CYAN, "60 Sekunden sind vorüber, jetzt schnell weg hier!");
    format(str, sizeof(str), "Beute: $%d", PlayerInfo[playerid][pRobTotal]);
    SendClientMessage(playerid, COLOR_CYAN, str);//nach 12 wiederholungen stoppt der timer
    return 1;
    }
    else
    {
    printf("2");
    if(IsPlayerInRangeOfPoint(playerid, 12,2144.2869,1635.0681,993.5761))
    {
    printf("3");
    money = random(60001) + 60000;
    GivePlayerMoney(playerid, money);
    PlayerInfo[playerid][pCash] += money;
    format(str, sizeof(str), "5 Sekunden sind vorüber, Beute: $%d", money);
    print(str);
    SendClientMessage(playerid, COLOR_CYAN, str);
    SetTimerEx("VosaRob", 5000, false, "d", playerid);
    PlayerInfo[playerid][pRob] ++;
    PlayerInfo[playerid][pRobTotal] += money;
    printf("pRob: %i",PlayerInfo[playerid][pRob]);
    return 1;
    }
    else
    {
    printf("4");
    SendClientMessage(playerid, COLOR_ERROR, "Raub abgebrochen, Du hast den Raum verlassen.");
    printf("5");
    GetPlayerName(playerid,str,sizeof(str));
    format(str, sizeof(str), "Der Raub auf das Vault of San Andreas wurde abgebrochen, %s hat den Raum verlassen", str);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    SendClientMessage(i, COLOR_CYAN, str);
    }
    return 1;
    }
    }
    printf("6");
    return 1;
    }

    Du hast sowas hier im Query:
    $ - cash
    $ - bank
    job id
    frac id


    Das geht nicht. Spaltennamen mit Leerzeichen, insofern das überhaupt gehen würde, zu machen ist nicht gut, nutze stattdessen den Unterstrich "_".
    Ebenso die Dollars, die gehören da nicht hin.

    Setze mal beim /rob Befehl:
    PlayerInfo[playerid][pRob] = 0;


    Und dann ändere noch:
    if(PlayerInfo[playerid][pRob] == 12) {
    zu:
    if(PlayerInfo[playerid][pRob] >= 12) {

    Dann kannst du es so machen:
    if(!strcmp(cmdtext, "/sirene", true, 7))
    {
    if(strlen(cmdtext) == 7) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /sirene [an/aus]");
    else if(cmdtext[7] == ' ')
    {
    if(!strlen(cmdtext[8])) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /sirene [an/aus]");
    if(!strcmp(cmdtext[8], "an", true))
    {
    //an
    }
    else if(!strcmp(cmdtext[8], "aus", true))
    {
    //aus
    }
    else return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /sirene [an/aus]");
    return 1;
    }
    }

    Hab bloß noch ne Frage, was ist das hinter MAX_VEHICLES} = {-1, ...} ?

    Das heißt, dass alle Indizes (von 0 bis MAX_VEHICLES-1) auf -1 gesetzt werden, zum Deklarationszeitpunkt.
    Sonst wäre er 0, es gibt ja aber ein Objekt mit der ID 0, daher geht das nicht, sondern man muss eine andere Zahl (in dem Fall -1) nehmen.

    Vom Prinzip her kannst du das so machen:
    Unter den Includes:
    new sirenID[MAX_VEHICLES] = {-1, ...};


    Beim hin-machen:
    new vehicleid = GetPlayerVehicleID(playerid);
    sirenID[vehicleid] = CreateObject(/*...ausfüllen...*/);
    AttachObjectToVehicle(sirenID[vehicleid], vehicleid, /*...ausfüllen...*/);


    Beim entfernen und dort wo das Fahrzeug gelöscht wird:
    DestroyObject(sirenID[vehicleid]);
    sirenID[vehicleid] = -1;

    Die Karte (ESC) und das Radar zeigen die gleichen Dinge an, wie es auf dem einen ist, so auch auf dem anderen.
    Daher ist das leider nicht möglich.

    Wie sollte ich das am besten anstellen? Hab noch nie mehrere strings in einer Zeile benutzt.

    stringtotal[1024];
    string1,[256],string2[256],string3[256],string4[256];
    format(stringtotal,1024,%s%s%s%s,string1,string2,string3,string4);

    Bitte sowas nicht machen, das ist extrem speicher-verschwendend und dazu ziemlich unübersichtlich.


    Da in Queries meistens Platzhalter benötigt werden fällt strcat weg, mit format macht man es am besten so:

    new query[1024];
    format(query,sizeof(query),"UPDATE tabelle ");
    format(query,sizeof(query),"%s SET spalte = '%d', ", query, 1);
    format(query,sizeof(query),"%s spalte2 = '%d', ", query, 2);
    format(query,sizeof(query),"%s spalte3 = '%d' ", query, 3);
    format(query,sizeof(query),"%s WHERE id = '%d'", query, 1337);