Das ist nicht das Richtige.
Poste bitte einen Screenshot der Tabelle, in der die Fahrzeugdaten stehen und auch sichtbar sind.
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. -
Kannst du bitte mal einen Screenshot aus der Datenbanktabelle posten, in der die Fahrzeugdaten stehen?
-
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=72Dann 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. -
Der Code läuft in eine Endlosschleife, da lCount nicht hoch gezählt wird. Vermutlich liegt es hieran:
if(ModelID < 400 || ModelID > 611) continue;
Zu
if(ModelID < 400 || ModelID > 611) lCount++, continue; -
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);
} -
Das könnte daran liegen, dass ein Array gesprengt wird und an der Stelle der Code abbricht.
Du kannst das mit dem Crashdetect Plugin herausfinden.http://forum.sa-mp.com/showthread.php?t=262796
Lade dir das Plugin herunter und trage es in die server.cfg ein. Starte dann den Server und erzeuge das Problem.
Poste anschließend, was an der Stelle im Server Log steht. -
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.
-
ist damit die [20] gemeint?
Ja, da du mehr als 20 Zeichen nutzt.
Erhöhe das auf 30. -
new string[250],AutoSchein[20],MotoSchein[20];
Großes S bei "Schein".
Sonst überall mit kleinem "s".
Außerdem Moto anstatt Motorrad.new string[250],AutoSchein[20],MotoSchein[20];
zu:
new string[250],Autoschein[20],Motorradschein[20]; -
Was genau ist mit "Autoschein" gemeint und "Motorradschein" weil er sagt das ich das definieren soll
Du hast einmal "Autoschein" und einmal "AutoSchein" geschrieben.
Gleiches beim Motorradschein. -
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. -
Kein Thema, kommt vor, manchmal sieht man den Wald vor lauter Bäumen nicht mehr. Kenne ich nur zu gut.
-
OnPlayerExitVehicle
OnPlayerStateChange

if(pInfo[playerid][aFahrstunde] == 1);
Und hier das Semikolon entfernen.
-
Frage das bei OnPlayerStateChange ab.
Wenn oldstate == PLAYER_STATE_DRIVER und der Spieler im Fahrstunde-Modus ist. -
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-14Externer Inhalt www.youtube.comInhalte 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.