Beiträge von DominikGLL

    Man kann nicht eine komplette Map bauen wie Los Santos, dafür sind die Streamer zu schwach, jedes Detail ist ebenfalls nicht so ganz möglich, aber wir geben uns Mühe um die alten Probleme zu beheben.


    Ist es nicht möglich die Objekte zu exportieren und dann in Blender oder wie die ganzen 3D Programme heißen als ein riesen Objekt fertigzustellen, um dieses dann wiederum als ein Objekt in SA-MP zu importieren und zu erstellen?

    Kommt drauf an, wie du es machen möchtest.
    Du könntest einerseits mit der Funktion [wiki]SetVehicleParamsForPlayer[/wiki] das Fahrzeug nur für den Admin "betretbar" machen.
    Oder natürlich, so wie es in den meisten Fällen gemacht wird, mit einem Befehl.
    Dazu könntest du ebenfalls deine Variable


    acar[playerid]


    verwenden. Dazu solltest du diese allerdings global deklarieren, damit du sie auch außerhalb deines Befehls verwenden kannst (sieht oben so aus, als hättest du diese nur bei deinem FahrzeugSpawn Befehl deklariert).
    Dabei solltest du folgende Abfragen werden:
    1) Ist ein Fahrzeug überhaupt gespawned? Tipp: Nutz dazu einfach INVALID_VEHICLE_ID, wenn das der Fall ist, hat der Admin kein Fahrzeug gespawned.
    2) Ist der Admin in der Nähe seines Fahrzeuges?
    3) Erneute Nutzung der Funktionen [wiki]GetVehicleParamsEx[/wiki] und [wiki]SetVehicleParamsEx[/wiki]
    4) Über GetVehicleParamsEx könntest du dann überprüfen, ist das Fahrzeug derzeit offen oder geschlossen.

    Dann fang doch erst einmal bei den Basics an.
    Schau dir die Funktionen doch erst einmal an:


    [wiki]SetVehicleParamsEx[/wiki] sowie [wiki]GetVehicleParamsEx[/wiki] benötigen als Parameter die vehicleid.
    Diese wird automatisch beim erfolgreichen Ausführen von [wiki]CreateVehicle[/wiki] zurückgegeben.


    acar[playerid] = CreateVehicle(522, Pos[0], Pos[1], Pos[2], Pos[3], 0, 0, -1,1);


    In deinem Fall ist als acar[playerid] deine vehicleid.


    Ansonsten sind die weiteren Parameter der oben genannten Funktionen im Wiki 1a erläutert. Sogar mit Beispielquellcode.




    Nochmal zu [wiki]SetVehicleParamsForPlayer[/wiki]: Diese Funktion setzt die Fahrzeugparameter (Doors & Objective) für einen Spieler. Weitere Parameter wie Kofferraum können nur für alle gesetzt werden. Dabei werden die anderen Funktionen genutzt (s.o.)

    Wenn du dein Spraytag erstellst, läuft die Schleife einfach komplett durch. Es werden also MAX_Grafitti-1 erstellt. Du musst erstens auch Abfragen, ob in dem verwendeten index eventuell sogar schon ein Element vorhanden ist, ansonsten überschreibst du das Grafitti einfach und du erhälst auf dein altes Grafitti keinen Zugriff mehr auf.


    public Erstellengraff(playerid)
    {
    new v = random(200+200);
    POBJECT[playerid] += v;
    DestroyDynamicObject(POBJECT[playerid]); //Das Alte Object Löschen!
    POBJECT[playerid] = CreateDynamicObject(19482, Position[playerid][0], Position[playerid][1], Position[playerid][2], Position[playerid][3], Position[playerid][4], Position[playerid][5], GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), -1, 200);//Erstellung des Objects
    SetDynamicObjectMaterialText(POBJECT[playerid], 0, POBJECTN[playerid], OBJECT_MATERIAL_SIZE_256x256, "Diploma", 25, 0, 0xFFFFFFFF, 0, 1);//Einstellung des Textes
    GameTextForPlayer(playerid, "~w~Spruehen ]", 5000, 5);
    DeletePVar(playerid, "GraffitiErstellung"); //PVar Löschen
    SprayMunition[playerid] = 0;
    Spruhen ++;
    for(new i=1;i<MAX_GRAFFITI;i++)
    {
    if(Graffiti[i][gCreated])continue; //Ist dieser index bereits belegt, beendet die Schleife den Durchlauf hier und zählt einfach weiter
    new query[128];
    Graffiti[i][gCreated] = 1;
    format(query, sizeof(query), "INSERT INTO `server_graffitis` (GraffiID) VALUES ('%d')", i); //hier nutzt du den index für die Grafitti ID
    mysql_function_query(MySqlConnection, query, false, "", "");
    format(Graffiti[i][gGraffiName], 16, "%s", POBJECTN[playerid]);
    format(Graffiti[i][gGraffiErsteller], 16, "%s", GetName(playerid));
    Graffiti[i][gGraffiID] = POBJECT[playerid];
    Graffiti[i][gGraffiX] = Position[playerid][0];
    Graffiti[i][gGraffiY] = Position[playerid][1];
    Graffiti[i][gGraffiZ] = Position[playerid][2];
    Graffiti[i][gGraffiX2] = Position[playerid][3];
    Graffiti[i][gGraffiY2] = Position[playerid][4];
    Graffiti[i][gGraffiZ2] = Position[playerid][5];
    SaveGraffitis();
    return 1; //Hat die Schleife nun einen freien index gefunden, beenden wir hier die gesamte Schleife
    }
    return 1;
    }


    Das zweite Problem was ich sehe ist, du benutzt zum einen den index als Graffi ID in der Datenbank und zum Speichern benutzt du die Variable Graffiti[i][gGraffiID]. Das müsstest du noch überarbeiten und dich für eines entscheiden. Solltest du dich für den index entscheiden, dann solltest du bei deiner Tabelle AUTO_INCREMENT deaktivieren.





    public SaveGraffitis()
    {
    new count = 0, mainQuery[1537], secondQuery[256];
    for(new i=1;i<MAX_GRAFFITI;i++)
    {
    if(Graffiti[i][gCreated] == 1)
    {
    format(secondQuery, sizeof(secondQuery), "UPDATE `server_graffitis` SET `GraffiObj`='%d', `GraffiX`='%f' `GraffiY`='%f' `GraffiZ`='%f', `GraffiX2`='%f' `GraffiY2`='%f' `GraffiZ2`='%f', ",
    Graffiti[i][gGraffiObj], Graffiti[i][gGraffiX], Graffiti[i][gGraffiY], Graffiti[i][gGraffiZ], Graffiti[i][gGraffiX2], Graffiti[i][gGraffiY2], Graffiti[i][gGraffiZ2]);
    strcat(mainQuery, secondQuery);
    format(secondQuery, sizeof(secondQuery), "`Ersteller`='%s', `Name`='%s' WHERE `GraffiID`='%d' ", //hier nutzt du für das Speichern anstatt den index
    Graffiti[i][gGraffiErsteller], Graffiti[i][gGraffiName], Graffiti[i][gGraffiID]); //eine neue Variable
    strcat(mainQuery, secondQuery);
    print(mainQuery);
    mysql_function_query(MySqlConnection, mainQuery, false, "", "");
    strdel(mainQuery, 0, sizeof(mainQuery));
    count++;
    printf("[SAVE] Graffiti wurden gespeichert. (%d/%d)", count, MAX_GRAFFITI);
    }
    }
    return 1;
    }



    Ich hoffe du kannst damit etwas anfangen und verstehst ein wenig, welche Probleme momentan vorliegen, ansonsten melde dich, dann kann ich es versuchen noch ein wenig mehr zu erläutern. Ich sehe des öfteren von dir, dass du ganz viele dynamische System verwendest oder erstellst. Schaut dir mal in dem Zuge die Foreach & Iterator Funktionen an, hier ein kleines Tutorial aus dem englischen Forum: https://forum.sa-mp.com/showthread.php?t=588526

    Hey, Ich habe ein server seid neustem und fuchse mich gerade bischen rein und suche gerade ein adminbefehl um jemanden wieder zu beleben wenn jemand gestorben ist
    Danke schonmal




    EDIT: ist jetzt drin

    Dein Bild zeigt nur die Hälfte von OnPlayerDeath, nutze doch - wenn der Code solang ist - Pastebin, um uns deinen Quellcode zu zeigen, dann können wir dir auch sagen, wie die Variable bei dir heißt.