Beiträge von Jeffry

    Du kannst seinen Code nicht einfach kopieren.

    Nutzt du denn das sscanf Plugin oder die sscanf Funktion im Code?
    Falls letzteres, dann dürfte es schon reichen, ...

    Eventuell:
    dcmd_r(playerid,params[])
    {
    if(IstSpielerInFraktion(playerid, 0))return SendClientMessage(playerid,ROT,"Du bist in keiner Fraktion.");
    new string[145];
    if(sscanf(params, "s", string)) return SendClientMessage(playerid,GELB,"INFO: /r [Nachicht]");
    new fID = sSpieler[playerid][Fraktion];
    format(string,sizeof(string), "**(( %s: %s ))**", GetPlayerName(playerid), string);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!IstSpielerInFraktion(i, fID))continue;
    SendClientMessage(i,HBLAU, string);
    }
    return 1;
    }

    Vergewaltige jetzt bitte nicht deinen Code um einen neuen Command Prozessor. Das ist völliger Quark und löst das Problem auch nicht.


    Nutzt du denn das sscanf Plugin oder die sscanf Funktion im Code?
    Falls letzteres, dann dürfte es schon reichen, wenn du in deinem ursprünglichen Befehl
    if(sscanf(params, "s[128]", string))return SendClientMessage(playerid,GELB,"INFO: /r [Nachicht]");
    zu:
    if(sscanf(params, "s", string))return SendClientMessage(playerid,GELB,"INFO: /r [Nachicht]");
    änderst.

    Füge nach
    if(pID > -1)
    {
    format(string,sizeof(string),"Besitzer %s [%d] Letzter Fahrer: %s",getPlayerName(pID),pID,LastDriver[vid]);
    SendClientMessage(playerid,-1,string);
    }
    Mal das ein
    else
    {
    format(string,sizeof(string),"Besitzer Niemand [%d] Letzter Fahrer: %s",pID,LastDriver[vid]);
    SendClientMessage(playerid,-1,string);
    }


    Zeigt es dir dann etwas an?

    Die zweite Schleife ist nicht notwendig und das obere return -1 darf nicht in der Schleife stehen.
    Schreibe es so:
    GetVehicleBesitzer(vehicelid)
    {
    for(new i = 0; i < sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x] == vehicelid)
    {
    if(!IsPlayerConnected(cInfo[i][besitzer]) || IsPlayerNPC(cInfo[i][besitzer])) return -1;
    else return cInfo[i][besitzer];
    }
    }
    return -1;
    }

    if(IsAOamtCar(Vehicle))
    Zu
    else if(IsAOamtCar(Vehicle))


    Und
    if(IsABus(Vehicle))
    Zu
    else if(IsABus(Vehicle))


    Alternativ kannst du nach den SendClientMessage's, nach denen nichts mehr ausgegeben werden soll, ein return 1 setzen.

    Du musst das Query verbinden, sonst nimmt er nur den zweiten Teil.
    mysql_format(handle, query, sizeof(query),"klasse = '%d', morde = '%d', tode = '%d', verbrechen = '%d', ap = '%d', premium = '%d', donator = '%d', contractgeld = '%d', changeteamzeit = '%d', carkey = '%d', eventmann = '%d', ooctog = '%d', pntog = '%d', killstreaksoundtog = '%d', hitsoundtog = '%d', connecttog = '%d', advertisetog = '%d', mitgliedertog = '%d', lottonr = '%d' WHERE id = '%d'",
    Spieler[playerid][Klasse],
    Zu
    mysql_format(handle, query, sizeof(query),"%sklasse = '%d', morde = '%d', tode = '%d', verbrechen = '%d', ap = '%d', premium = '%d', donator = '%d', contractgeld = '%d', changeteamzeit = '%d', carkey = '%d', eventmann = '%d', ooctog = '%d', pntog = '%d', killstreaksoundtog = '%d', hitsoundtog = '%d', connecttog = '%d', advertisetog = '%d', mitgliedertog = '%d', lottonr = '%d' WHERE id = '%d'",
    query,
    Spieler[playerid][Klasse],

    aber das geht nicht oder


    So zumindest nicht, weil du mit "Weizen[]" ein Array ohne Größe erstellst.
    Dort muss eine Maximalangabe drin stehen.
    Zudem zählt dieses Array ja für alle Spieler.


    Was du brauchst ist eine Variable im Spieler-Array, die hochzählt, wie viele Weizen der Spieler besitzt, und dann kannst du je nach Skill abfragen, ob er noch mehr besitzen darf.



    Und dann musst du das Array für alle Spieler haben, sprich:
    new Weizen[MAX_PLAYERS][MAX_WEIZEN][enum_Weizen];


    MAX_WEIZEN entspricht der maximalen Anzahl an Weizen, die ein Spieler haben kann, wenn er im höchsten Skill ist.

    Das Abschmieren lag an dem Print.
    Dass nicht gespeichert wird liegt - sofern du die Spalte nicht bereits angelegt hast - an der fehlenden Spalte "KSKLevel" in deiner Tabelle.


    Den Print zu löschen behebt den Fehler ja nicht, sondern der Fehler wird dir einfach nicht mehr angezeigt.


    Du kannst die Überlänge so aufteilen:
    public OnQueryError(errorid, error[], callback[], query[], connectionHandle)
    {
    printf("[MYSQL-ERROR] %i - %s in Callback %s on connection %i", errorid, error, callback, connectionHandle);
    print("[MYSQL-ERROR] Syntax-Error in the following query:");
    new tmp[513], len;
    while((len = strlen(query)) > 512)
    {
    strmid(tmp, query, 0, 512);
    strdel(query, 0, 512);
    print(tmp);
    }
    if(len > 0) print(query);
    print(query);
    }

    So meinte ich das...

    Ich habe es grade mal überprüft. Das Standard-Plate ist tatsächlich immer das gleiche, und zwar: XYZSR998


    Dann kannste es aber noch viel einfacher machen, und zwar beim CreateVehicle (etc) das Property einfach auf den Wert setzen.
    Das ist wesentlich geschickter, als die Prüfung auf einen leeren String überall einzubauen.


    Oder optional dennoch das Random-Plate mit dort einbauen (per define ein-/ausschaltbar), damit im eingeschalteten Fall nicht alle Fahrzeuge das gleiche Nummernschild haben.


    Gut, muss beides nicht sein, aber den Standardwert zu setzen würde sicher nicht schaden.