Beiträge von Jeffry

    ...es war nur eine Ergänzung, dass man so strings für die Funktionen quasi "leeren" kann...


    Die Variable ist auch nicht "quasi" leer, sie ist gar nicht leer. Man nutzt nur einen Fehler, wie BlackAce sagte. Jetzt stell dir mal vor (die Vorstellung ist bei SA-MP zwar etwas absurd, aber generell) du hast in der Variable sensible Daten, von mir aus eine Kontonummer. Du "leerst" nun die Variable nach deiner Methode, es folgt etwas Code und dann übergibst du den Wert der Variable (wohlgemerkt den neuen) an eine andere Variable und nehmen wir mal an das läuft über eine Schnittstelle in ein anderes System, vielleicht extern. Derjenige Programmierer bekommt dadurch dann möglicherweise Zugriff auf die Kontonummer, wenn du Pech hast, sie steht ja schließlich (wie das "u") noch in der Variable drin. Ich denke ich muss das nicht weiterführen, es ist klar auf was das hinauslaufen kann, wenn man sich solcher vermeintlich nützlichen Dinge betätigt.


    Außerdem wäre eine direkte Zuweisung (x = "Noob";) wesentlich performanter und hat das gleiche Ergebnis (mal von obiger Hypothese abgesehen, da das Problem dort auch existiert).
    Willst du das Problem wirklich umgehen und den Speicher wirksam leeren (sodass kein sinnvoller Zugriff mehr darauf besteht), musst du ihn entweder überschreiben oder memcpy verwenden (was übrigens gleich schnell ist aber nur eine Zeile Code benötigt).

    Zu den Errors:
    Suche im Enum nach fLock und fUnlockCar. Entferne dort auch das
    #if defined FACTION_CARS_LOCKABLE
    und
    #else
    Oder füge direkt unter den Includes das ein:
    #define FACTION_CARS_LOCKABLE



    Zum DestroyAndCreateFactionCar:
    Der Code zum setzen des Kennzeichens ist gar nicht drin? Wo ist der hin?

    if((FracVehicles[f][f_FracID] != PlayerInfo[playerid][pFraktion] || !IsPlayerLeader(playerid)) && PlayerInfo[playerid][pAdmin] < 5)return SCM(playerid,COLOR_WHITE, FEHLERTEXT"Du hast keine Berechtigung diesen Befehl zu benutzen.");

    Dann poste bitte mal die gesamte DestroyAndCreate... Funktion.


    Zwecks dem Lock Befehl, versuche es so:
    if(strcmp(cmdtext,"/flock",true)==0)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    for(new fc;fc<sizeof(FactionCars);fc++)
    {
    if(FactionCars[fc][fVehid] >= 400 && FactionCars[fc][fVehid] <= 611)
    {
    if(GetPlayerVehicleID(playerid) == FactionCars[fc][fCarid])
    {
    for(new f;f<5;f++)
    {
    if(GetPlayerAdmin(playerid) >= NEEDED_ADMINLEVEL || GetPlayerFaction(playerid) == FactionCars[fc][fFaction][f])
    {
    PlayerPlaySound(playerid,1145,0.0,0.0,0.0);
    if(FactionCars[fc][fLock] == true)
    {
    FactionCars[fc][fLock] = false;
    fUnlockCar(FactionCars[fc][fCarid]);
    GameTextForPlayer(playerid,"~w~Fahrzeug~n~~g~Aufgeschlossen",5000,3);
    }
    else if(FactionCars[fc][fLock] == false)
    {
    fLockCar(FactionCars[fc][fCarid]);
    FactionCars[fc][fLock] = true;
    GameTextForPlayer(playerid,"~w~Fahrzeug~n~~r~Abgeschlossen",5000,3);
    }
    break;
    }
    }
    return true;
    }
    }
    }
    SendClientMessage(playerid,FACTION_COL_GREY,"Du sitzt in keinem Fraktionsfahrzeug!");
    }
    else
    {
    if(GetPlayerState(playerid)==PLAYER_STATE_PASSENGER) SendClientMessage(playerid,FACTION_COL_GREY,"Du musst der Fahrer dieses Fahrzeuges sein.");
    else SendClientMessage(playerid,FACTION_COL_GREY,"Du muss in einem Fahrzeug sitzen.");
    }
    return true;
    }
    return 1;
    }

    Weder noch. Es wird nur das Endzeichen an erste Stelle gesetzt, sodass bei String-Ausgaben nichts mehr angezeigt wird. An sich völlig nutzlos.


    new string[10];
    string = "abcdefgh";
    printf("%c | %s", string[3], string);
    string[0] = '\0';
    printf("%c | %s", string[3], string);

    Zitat

    [28/05/2015 16:50:20] d | abcdefgh
    [28/05/2015 16:50:20] d |

    Ok, dann versuche es so:
    new bool:loginShown[MAX_PLAYERS];


    public OnPlayerRequestClass(playerid, classid)
    {
    SetSpawnInfo(playerid,0,spawnskins[random(sizeof(spawnskins))],-1952.1089,112.4961,26.2813,291.3821,0,0,0,0,0,0);
    //SpawnPlayer(playerid);
    TogglePlayerSpectating(playerid,1);

    if(!loginShown[playerid])
    {
    loginShown[playerid] = true;
    new
    Query[ 150 ],
    DBResult: Result,
    name[ MAX_PLAYER_NAME ],
    DBResult: Wanted
    ;
    GetPlayerName(playerid, name, sizeof(name));

    Bit1_Set(g_PlayerLogged, playerid, false);

    format(Query, sizeof(Query), "SELECT `NAME` FROM `USERS` WHERE `NAME` = '%s' COLLATE NOCASE", DB_Escape(name));
    Result = db_query(Database, Query);
    if(db_num_rows(Result))
    {
    format(Query, sizeof(Query), "{FFFFFF}Willkommen "COL_BLUE"%s (%d){FFFFFF} auf unserem Server, Du bist Registriert!\n\nBitte Logge dich nun mit deinem Passwort ein.", name, playerid);
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FFFFFF}Login", Query, "Login", "Verlassen");
    }
    else
    {
    format(Query, sizeof(Query), "{FFFFFF}Willkommen "COL_BLUE"%s (%d){FFFFFF} auf unserem Server, Du bist "COL_RED"nicht{FFFFFF} Registriert!\n\nBitte Logge dich nun mit deinem Passwort ein.", name, playerid);
    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{FFFFFF}Registration", Query, "Register", "Verlassen");
    }
    db_free_result(Result);
    }
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    loginShown[playerid] = false;
    //WantedLevel[ClickedSuspectID[playerid]]
    return 1;
    }

    format(string, sizeof(string), "Administrator %s(ID:%d) hat allen Spielern Level "%d\ gegeben"", pName(playerid), playerid, id);
    zu:
    format(string, sizeof(string), "Administrator %s(ID:%d) hat allen Spielern Level %d gegeben.", pName(playerid), playerid, id);

    Hm, dann versuche es doch mal so:
    FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255);
    switch(FactionCars[fc][fFaction][0])
    {
    case 1: SetVehicleNumberPlate(FactionCars[fc][fCarid], "Regierung");
    case 2: SetVehicleNumberPlate(FactionCars[fc][fCarid], "SAPD");
    case 3: SetVehicleNumberPlate(FactionCars[fc][fCarid], "ARZT");
    case 4: SetVehicleNumberPlate(FactionCars[fc][fCarid], "FBI");
    case 5: SetVehicleNumberPlate(FactionCars[fc][fCarid], "SA Army");
    case 6: SetVehicleNumberPlate(FactionCars[fc][fCarid], "LCM");
    case 7: SetVehicleNumberPlate(FactionCars[fc][fCarid], "YAKUZA");
    case 8: SetVehicleNumberPlate(FactionCars[fc][fCarid], "XXXXXX");
    case 9: SetVehicleNumberPlate(FactionCars[fc][fCarid], "SA NEWS");
    case 10: SetVehicleNumberPlate(FactionCars[fc][fCarid], "TAXI");
    case 11: SetVehicleNumberPlate(FactionCars[fc][fCarid], "FAHRSCHULE");
    case 12: SetVehicleNumberPlate(FactionCars[fc][fCarid], "TRIADEN");
    case 13: SetVehicleNumberPlate(FactionCars[fc][fCarid], "RIFA");
    case 14: SetVehicleNumberPlate(FactionCars[fc][fCarid], "GROVE");
    case 15: SetVehicleNumberPlate(FactionCars[fc][fCarid], "BALLAS");
    case 16: SetVehicleNumberPlate(FactionCars[fc][fCarid], "VAGOS");
    case 17: SetVehicleNumberPlate(FactionCars[fc][fCarid], "AZTECAS");
    case 18: SetVehicleNumberPlate(FactionCars[fc][fCarid], "RS");
    case 19: SetVehicleNumberPlate(FactionCars[fc][fCarid], "XXXXXX");
    case 20: SetVehicleNumberPlate(FactionCars[fc][fCarid], "XXXXXX");
    case 21: SetVehicleNumberPlate(FactionCars[fc][fCarid], "Hells Angels");
    case 22: SetVehicleNumberPlate(FactionCars[fc][fCarid], "RUSSEN");
    case 23: SetVehicleNumberPlate(FactionCars[fc][fCarid], "Ordnungsamt");
    }
    SetVehicleToRespawn(FactionCars[fc][fCarid]);
    zu:
    switch(FactionCars[fc][fFaction][0])
    {
    case 1: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "Regierung");
    case 2: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "SAPD");
    case 3: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "ARZT");
    case 4: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "FBI");
    case 5: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "SA Army");
    case 6: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "LCM");
    case 7: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "YAKUZA");
    case 8: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "XXXXXX");
    case 9: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "SA NEWS");
    case 10: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "TAXI");
    case 11: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "FAHRSCHULE");
    case 12: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "TRIADEN");
    case 13: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "RIFA");
    case 14: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "GROVE");
    case 15: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "BALLAS");
    case 16: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "VAGOS");
    case 17: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "AZTECAS");
    case 18: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "RS");
    case 19: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "XXXXXX");
    case 20: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "XXXXXX");
    case 21: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "Hells Angels");
    case 22: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "RUSSEN");
    case 23: SetVehicleNumberPlate((FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255)), "Ordnungsamt");
    }

    Lass dir mal ausgeben für welche Fraktion das Fahrzeug ist:
    SetVehicleToRespawn(FactionCars[fc][fCarid]);
    zu:
    printf("%d gehört zu: %d", FactionCars[fc][fCarid], FactionCars[fc][fFaction][0]);
    SetVehicleToRespawn(FactionCars[fc][fCarid]);


    Was steht dann im Log?

    %e funktioniert nur in mysql_format und bei Strings.
    Außerdem reicht ein Query, du musst keine 4 senden.
    Versuche es so:
    public SaveUser(playerid)
    {
    if(PlayerInfo[playerid][Logged] == 1 && !IsPlayerNPC(playerid))
    {
    GetPlayerPos(playerid,PlayerInfo[playerid][PosX],PlayerInfo[playerid][PosY],PlayerInfo[playerid][PosZ]);
    GetPlayerFacingAngle(playerid,PlayerInfo[playerid][Angle]);

    new query[1024];

    format(query,sizeof(query),"UPDATE `user` SET `firstlogin` = '%d',`skin` = '%d',`hanf` = '%d',`invite` = '%d',`age` = '%d',`muted` = '%d',`crimes` = '%d',`wanted` = '%d',`sex` = '%d',",
    PlayerInfo[playerid][FirstLogin],PlayerInfo[playerid][Skin],PlayerInfo[playerid][Hanf],PlayerInfo[playerid][Invite],PlayerInfo[playerid][Age],PlayerInfo[playerid][Muted],PlayerInfo[playerid][Crimes],
    PlayerInfo[playerid][Wanted],PlayerInfo[playerid][Sex]);

    format(query,sizeof(query),"%s`kokain` = '%d',`leader` = '%d',`job` = '%d',`member` = '%d',`jailed` = '%d',`dead` = '%d',`perso` = '%d',`admin` = '%d',`deaths` = '%d',",
    query,PlayerInfo[playerid][Kokain],PlayerInfo[playerid][Leader],PlayerInfo[playerid][Job],PlayerInfo[playerid][Member],PlayerInfo[playerid][Jailed],PlayerInfo[playerid][Dead],PlayerInfo[playerid][Perso],PlayerInfo[playerid][Admin],
    PlayerInfo[playerid][Deaths]);

    format(query,sizeof(query),"%s`kills` = '%d',`bank` = '%d',`number` = '%d',",
    query,PlayerInfo[playerid][Kills],PlayerInfo[playerid][Bank],PlayerInfo[playerid][Number]);

    format(query,sizeof(query),"%s`money` = '%d',`rank` = '%d',`level` = '%d',`banned` = '%d',`exp` = '%d',`posx` = '%f',`posy` = '%f',`posz` = '%f',`angle` = '%f' WHERE `id` = '%d'",
    query,PlayerInfo[playerid][Money],PlayerInfo[playerid][Rank],PlayerInfo[playerid][Level],PlayerInfo[playerid][Banned],
    PlayerInfo[playerid][EXP],PlayerInfo[playerid][PosX],PlayerInfo[playerid][PosY],PlayerInfo[playerid][PosZ],PlayerInfo[playerid][Angle],PlayerInfo[playerid][ID]);

    mysql_function_query(dbhandle,query,false,"","");
    }
    new player[MAX_PLAYER_NAME];
    GetPlayerName(playerid, player, sizeof(player));
    printf("AUTO-SAVE: Der Spieler %s wurde automatisch in der MySQL Tabelle 'user' abgespeichert!",player);
    return 1;
    }

    Drück mal F5 wenn du im Spiel bist. Was steht da bei den erstellten/angezeigten Objekten? Möglicherweise hast du das Limit fast erreicht. Dann darfst du (nicht wie im pastebin) die Objekte mit CreateObject erstellen, sondern musst diese auch mit dem Streamer erstellen.

    Dann musst du beim LoadFactionCars nach:
    FactionCars[fc][fCarid] = CreateVehicle(FactionCars[fc][fVehid],FactionCars[fc][fPos][0],FactionCars[fc][fPos][1],FactionCars[fc][fPos][2],FactionCars[fc][fPos][3],FactionCars[fc][fCol][0],FactionCars[fc][fCol][1],-255);
    das verwenden:
    SetVehicleNumberPlate(FactionCars[fc][fCarid], "TRIADEN");
    SetVehicleToRespawn(FactionCars[fc][fCarid]);


    Man könnte es auch in einer Zeile machen, aber auf Gründen der Übersichtlichkeit lass ich das hier.


    Hast du mehrere Kennzeichen, wovon ich ausgehe, musst du es mit einem switch aussuchen lassen:
    switch(FactionCars[fc][fFaction][0])
    {
    case 1: SetVehicleNumberPlate(FactionCars[fc][fCarid], "TRIADEN");
    case 2: SetVehicleNumberPlate(FactionCars[fc][fCarid], "WAS_ANDERES");
    //...
    }