Beiträge von Jeffry

    Hallo ich habe ein Script mit 40.000 Zeilen wenn ich das Compile dann dauert es immer nur so 1-2 Minuten, jetzt dauert es noch länger überhaupt ich keine Systeme oder so eingefügt habe es ist alles gleich weiß einer warum?

    Je mehr globale und lokale Variablen du deklarierst, und je mehr Code du an sich hast, kann der Vorgang einige Zeit in Anspruch nehmen. Vor allem größere Arrays, die im Code verwendet werden, tragen zu sehr langen Laufzeiten bei.
    Je stärker die Systemleistung (CPU, RAM, Festplatte), desto schneller geht es.

    Beim Sperren, speichere die Zeit so:
    pInfo[playerid][pAutosperre] = gettime();
    Im Befehl zum Auslesen, nutze: http://forum.sa-mp.com/showthread.php?t=347605
    Beachte dort auch den Korrekturhinweis von mir auf Seite 8: http://forum.sa-mp.com/showpost.php?p=3807026&postcount=72


    Dann kannst du damit das Datum so anzeigen:
    format(string, sizeof(string), "... Erteilt am: %02d.%02d.%d", day, month, year);


    Bezüglich der Restzeit, diese kannst du wie folgt errechnen:
    new seconds = pInfo[playerid][pAutosperreBis] - gettime();
    new days = seconds / 86400;
    seconds -= days * 86400;
    new hours = seconds / 3600;
    seconds -= hours * 3600;
    new minutes = seconds / 60;
    seconds -= minutes * 60;
    format(string, sizeof(string), "... Noch gesperrt: %d Tage, %d Stunden, %d Minuten, %d Sekunden", days, hours, minutes, seconds);
    Falls pAutoSperreBis kleiner gleich gettime ist, liegt keine Sperre mehr vor.


    Die Festlegung der Sperrzeit an entsprechender Stelle wie folgt (beispielsweise):
    pInfo[playerid][pAutosperreBis] = gettime() + ANZAHL_TAGE * 86400;



    Um im Scheine Befehl eine andere playerid auszulesen, musst du die playerid über z.B. sscanf oder strtok auslesen.
    Schaue zuerst, ob du in deinem Code bereits einen Befehl hast, mit dem eine andere playerid, angesprochen werden kann, um zu prüfen, welches System genutzt wird. In gleicher Weise kannst du das dann umsetzen.

    Wie kann ich die Schleife endlos fortführen lassen nach der Aktivierung?
    Sprich soll permanent abgefragt werden ob der Spieler sich in der Nähe eines objekts befindet.

    Nutze einen Timer, der jede Sekunde (oder schneller) für alle Spieler die Prüfung durchführt, oder schreibe den Code unter OnPlayerUpdate hin (wird ca. 5-25 mal pro Sekunde aufgerufen).

    Ok, dann kommt es nicht davon.
    Schreibe den Code bitte mal so, und poste dann, was im Server Log steht, wenn du den Server startest:
    case _SQL_FRAKTIONSCARS_LOAD:
    {
    print(" "), print(TRENNLINIE), printf("[ - SCRIPT - ] | Fraktionscars werden geladen...");
    cache_get_data(rows, fields);
    printf("1");
    new lCount, lID, lStart = GetTickCount(), ModelID, Color[2], Float:Pos[4], tmp_databaseid;
    printf("2");

    if(rows)
    {
    printf("3: %d rows", rows);
    while(lCount < rows)
    {
    printf("4: %d lCount", lCount);
    cache_get_field_content(lCount, "ID", lResult), tmp_databaseid = strval(lResult);
    cache_get_field_content(lCount, "ModelID", lResult); ModelID = strval(lResult);
    if(ModelID < 400 || ModelID > 611) continue;
    cache_get_field_content(lCount, "Farbe1", lResult); Color[0] = strval(lResult);
    cache_get_field_content(lCount, "Farbe2", lResult); Color[1] = strval(lResult);
    cache_get_field_content(lCount, "PosX", lResult); Pos[0] = floatstr(lResult);
    cache_get_field_content(lCount, "PosY", lResult); Pos[1] = floatstr(lResult);
    cache_get_field_content(lCount, "PosZ", lResult); Pos[2] = floatstr(lResult);
    cache_get_field_content(lCount, "PosA", lResult); Pos[3] = floatstr(lResult);

    new vid = CreateVehicleEx(ModelID, Pos[0], Pos[1], Pos[2], Pos[3], Color[0], Color[1]);
    cache_get_field_content(lCount, "AnmeldungsOrt", lResult); FFahrzeugInfo[vid][fAnmeldungsOrt] = strval(lResult);
    cache_get_field_content(lCount, "KFZNummer", lResult); FFahrzeugInfo[vid][fKFZNummer] = strval(lResult);
    IsFraktionsCar[vid] = true;
    SetVehicleRightNumberPlate(vid);

    FFahrzeugInfo[vid][fDatabaseID] = tmp_databaseid;

    FFahrzeugInfo[vid][fFarbe1] = Color[0];
    FFahrzeugInfo[vid][fFarbe2] = Color[1];
    FFahrzeugInfo[vid][fModelID] = ModelID;
    FFahrzeugInfo[vid][fPosX] = Pos[0];
    FFahrzeugInfo[vid][fPosY] = Pos[1];
    FFahrzeugInfo[vid][fPosZ] = Pos[2];
    FFahrzeugInfo[vid][fPosA] = Pos[3];

    cache_get_field_content(lCount, "FrakID", lResult), FFahrzeugInfo[vid][fFrakID] = strval(lResult);
    cache_get_field_content(lCount, "ParkPosX", lResult), FFahrzeugInfo[vid][fParkPosX] = floatstr(lResult);
    cache_get_field_content(lCount, "ParkPosY", lResult), FFahrzeugInfo[vid][fParkPosY] = floatstr(lResult);
    cache_get_field_content(lCount, "ParkPosZ", lResult), FFahrzeugInfo[vid][fParkPosZ] = floatstr(lResult);
    cache_get_field_content(lCount, "ParkPosA", lResult), FFahrzeugInfo[vid][fParkPosA] = floatstr(lResult);
    cache_get_field_content(lCount, "Paintjob", lResult), FFahrzeugInfo[vid][fPaintjob] = strval(lResult);
    cache_get_field_content(lCount, "Abgeschlossen", lResult), FFahrzeugInfo[vid][fAbgeschlossen] = strval(lResult);
    cache_get_field_content(lCount, "Versichert", lResult), FFahrzeugInfo[vid][fVersichert] = strval(lResult);
    cache_get_field_content(lCount, "Abgeschleppt", lResult), FFahrzeugInfo[vid][fAbgeschleppt] = strval(lResult);
    cache_get_field_content(lCount, "TankInhalt", lResult), FFahrzeugInfo[vid][fTankInhalt] = strval(lResult);
    cache_get_field_content(lCount, "TankArt", lResult), FFahrzeugInfo[vid][fTankArt] = strval(lResult);
    cache_get_field_content(lCount, "Batterie", lResult), FFahrzeugInfo[vid][fBatterie] = strval(lResult);
    cache_get_field_content(lCount, "MeterStand", lResult), FFahrzeugInfo[vid][fMeterStand] = strval(lResult);
    cache_get_field_content(lCount, "TagesMeterStand", lResult), FFahrzeugInfo[vid][fTagesMeterStand] = strval(lResult);
    cache_get_field_content(lCount, "FRadio", lResult), FFahrzeugInfo[vid][fFRadio] = strval(lResult);
    cache_get_field_content(lCount, "Zustand", lResult), FFahrzeugInfo[vid][fZustand] = floatstr(lResult);
    cache_get_field_content(lCount, "Mod1", lResult), FFahrzeugInfo[vid][fMod1] = strval(lResult);
    cache_get_field_content(lCount, "Mod2", lResult), FFahrzeugInfo[vid][fMod2] = strval(lResult);
    cache_get_field_content(lCount, "Mod3", lResult), FFahrzeugInfo[vid][fMod3] = strval(lResult);
    cache_get_field_content(lCount, "Mod4", lResult), FFahrzeugInfo[vid][fMod4] = strval(lResult);
    cache_get_field_content(lCount, "Mod5", lResult), FFahrzeugInfo[vid][fMod5] = strval(lResult);
    cache_get_field_content(lCount, "Mod6", lResult), FFahrzeugInfo[vid][fMod6] = strval(lResult);
    cache_get_field_content(lCount, "Mod7", lResult), FFahrzeugInfo[vid][fMod7] = strval(lResult);
    cache_get_field_content(lCount, "Mod8", lResult), FFahrzeugInfo[vid][fMod8] = strval(lResult);
    cache_get_field_content(lCount, "Mod9", lResult), FFahrzeugInfo[vid][fMod9] = strval(lResult);
    cache_get_field_content(lCount, "Mod10", lResult), FFahrzeugInfo[vid][fMod10] = strval(lResult);
    cache_get_field_content(lCount, "Mod11", lResult), FFahrzeugInfo[vid][fMod11] = strval(lResult);
    cache_get_field_content(lCount, "Mod12", lResult), FFahrzeugInfo[vid][fMod12] = strval(lResult);
    cache_get_field_content(lCount, "Mod13", lResult), FFahrzeugInfo[vid][fMod13] = strval(lResult);
    cache_get_field_content(lCount, "Mod14", lResult), FFahrzeugInfo[vid][fMod14] = strval(lResult);
    cache_get_field_content(lCount, "Panels", lResult), FFahrzeugInfo[vid][fPanels] = strval(lResult);
    cache_get_field_content(lCount, "Doors", lResult), FFahrzeugInfo[vid][fDoors] = strval(lResult);
    cache_get_field_content(lCount, "Lights", lResult), FFahrzeugInfo[vid][fLights] = strval(lResult);
    cache_get_field_content(lCount, "Tires", lResult), FFahrzeugInfo[vid][fTires] = strval(lResult);
    cache_get_field_content(lCount, "Panzerung", lResult), FFahrzeugInfo[vid][fPanzerung] = strval(lResult);
    cache_get_field_content(lCount, "KennzeichenFarbe", lResult), FFahrzeugInfo[vid][fKennzeichenFarbe] = strval(lResult);
    cache_get_field_content(lCount, "Autogas", lResult), FFahrzeugInfo[vid][fAutogas] = strval(lResult);

    if(FFahrzeugInfo[vid][fZustand] > 300) SetVehicleHealth(vid, FFahrzeugInfo[vid][fZustand]);
    else SetVehicleHealth(vid, 300);
    TankInhalt[vid] = FFahrzeugInfo[vid][fTankInhalt];
    Batterie[vid] = FFahrzeugInfo[vid][fBatterie];
    MeterStand[vid] = FFahrzeugInfo[vid][fMeterStand];
    TagesMeterStand[vid] = FFahrzeugInfo[vid][fTagesMeterStand];
    FRadio[vid] = FFahrzeugInfo[vid][fFRadio];
    TankInhaltArt[vid] = FFahrzeugInfo[vid][fTankArt];
    AddSpielerCarComponents(vid);
    UpdateVehicleDamageStatus(vid, FFahrzeugInfo[vid][fPanels], FFahrzeugInfo[vid][fDoors], FFahrzeugInfo[vid][fLights], FFahrzeugInfo[vid][fTires]);
    new engine, light, alarm, door, bonnet, boot, objective;
    GetVehicleParamsEx(vid, engine, light, alarm, door, bonnet, boot, objective);
    if(FFahrzeugInfo[vid][fAbgeschlossen] == 1) SetVehicleParamsEx(vid, engine, light, alarm, VEHICLE_PARAMS_ON, bonnet, boot, objective);
    else SetVehicleParamsEx(vid, engine, light, alarm, VEHICLE_PARAMS_OFF, bonnet, boot, objective);
    lID++; lCount++;
    }
    }
    printf("[ - SCRIPT - ] | Fraktionscars erfolgreich in %d Millisekunden geladen!", GetTickCount()-lStart);
    }

    Du benötigst die ganzen Variablen gar nicht.
    Schreibe es so, das ist wesentlich übersichtlicher:
    ocmd:scheine(playerid,params[])
    {
    new string[250];
    format(string, sizeof(string), "Du besitzt folgende Scheine:\n\n");


    if(pInfo[playerid][pAutoschein]) format(string, sizeof(string), "%s{00FF00}• Autoschein", string);
    else format(string, sizeof(string), "%s{C45461}• Autoschein", string);

    if(pInfo[playerid][aPunkte] < 1) format(string, sizeof(string), "%s {00FF00}%d/10\n", string, pInfo[playerid][aPunkte]);
    else format(string, sizeof(string), "%s {C45461}%d/10\n", string, pInfo[playerid][aPunkte]);

    if(pInfo[playerid][pMotorradschein]) format(string, sizeof(string), "%s{00FF00}• Motorradschein", string);
    else format(string, sizeof(string), "%s{C45461}• Motorradschein", string);


    ShowPlayerDialog(playerid,5555,DIALOG_STYLE_MSGBOX,"{FFFFFF}Scheine",string,"Schließen","");
    return 1;
    }

    Das bedeutet, dass die Einrückung der Zeilen nicht korrekt ist. Rücke alle Zeilen auf gleicher Ebene (pro geschweifte Klammer auf, eine Ebene) gleich ein.


    Das heißt du musst die vier Zeilen nach der "new..." Zeile um einen Tab nach links schieben.

    Dann musst du prüfen, ob es sich um ein Fahrschulauto handelt, beim Einsteigen:
    if(pInfo[playerid][aFahrstunde] == 1 && newstate == PLAYER_STATE_DRIVER)
    {
    new vid = GetPlayerVehicleID(playerid);
    for(new i = 0; i < sizeof(Fahrschulauto); i++)
    {
    if(vid == Fahrschulauto[i])
    {
    pInfo[playerid][FahrstundeVID] = vid;
    break;
    }
    }
    }


    Und beim Aussteigen prüfen, ob der Spieler auch in einem solchen Fahrzeug war, das geht in dem Falle dann recht einfach:
    if(pInfo[playerid][aFahrstunde] == 1 && oldstate == PLAYER_STATE_DRIVER && pInfo[playerid][FahrstundeVID] != 0)
    {
    SetVehicleToRespawn(pInfo[playerid][FahrstundeVID]);
    pInfo[playerid][aFahrstunde] = 0;
    pInfo[playerid][FahrstundeVID] = 0;
    SendClientMessage(playerid,-1,"{c45461}Deine Fahrstunde wurde beendet, du hast das Fahrschul-Auto verlassen.");
    }

    Ist das nicht komplizierter, also wie erstelle ich diese Variable ich finde das so mega komplizier

    Füge es dem enum hinzu, da wo die andere Variable auch steht.


    Und dann beim Einsteigen in das Fahrzeug, wenn der Spieler im Fahrstunde Modus ist und newstate == PLAYER_STATE_DRIVER ist, dann setzt du die Variable gleich GetPlayerVehicleID. Du speicherst damit die vehicleid, damit diese auch nach Verlassen des Fahrzeugs noch bekannt ist.

    Das liegt daran, dass es zu 0 gesetzt wird, wenn du einsteigst. Das Fahrzeug müsste auch zurück gesetzt werden.
    Schreibe es so:
    if(pInfo[playerid][aFahrstunde] == 1 && oldstate == PLAYER_STATE_DRIVER)
    {
    RemovePlayerFromVehicle(playerid);
    SetVehicleToRespawn(pInfo[playerid][aFahrstundeVeh]);
    pInfo[playerid][aFahrstunde] = 0;
    }


    Edit:
    GetPlayerVehicleID geht nach dem Aussteigen nicht mehr, du bist ja in keinem Fahrzeug mehr. Speichere die vehicleid beim Einsteigen in die Spielervariable und nutze das anstatt GetPlayerVehicleID beim Aussteigen.

    Live vom Space Launch Complex 40 (SLC-40) der Cape Canaveral Air Force Station in Florida.


    Liftoff der SpaceX Falcon 9 mit "Dragon Spacecraft" um 22:30 unserer Zeit.
    Mission: CRS-14


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Wenn die anderen Funktionen auch so aussehen, dann ist das korrekt und sollte auch funktionieren.
    Lass dir ansonsten mal die Model-ID per print ausgeben, falls es nicht klappt, und prüfen dann, ob die vielleicht doch im switch drin steht.
    Vor den if-Abfragen:
    printf("vehicleid: %d / Model-ID: %d / sAuto: %d", vehicleid, GetVehicleModel(vehicleid), sAuto(vehicleid));