Beiträge von Jeffry

    Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches. Der Y Wert ist die geschätzte Höhe.


    Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist PlayerTextDrawTextSize-X = 120 + 64 = 184.
    Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre PlayerTextDrawTextSize-Y = 24.



    In deinem Fall in etwa so:
    PlayerTextDrawTextSize(playerid, Beenden[playerid], 374.0 + 50.0, 20.0);


    Die 50 und 20 sind nur geschätzt. Das kann natürlich mehr/weniger sein. Passe es dann entsprechend an.

    Ich nehme an, dass dein "normaler Adminrang" im Gamemode verwaltet wird.
    Daher im Gamemode das hinzufügen:
    forward getAdminLevel(playerid);
    public getAdminLevel(playerid) return SpielerInfo[playerid][AdminLevel];
    Die SpielerInfo Variable gegebenenfalls anpassen, wenn die AdminLevel Variable bei dir anders heißt.


    Dann im Filterscript alle
    if(!IsPlayerAdmin(playerid)) return SCM...
    ändern zu:
    if(CallRemoteFunction("getAdminLevel", "d", playerid) < 3) return SCM...
    3 habe ich als Beispiel genommen, da hieße, dass man mindestens Admin Level 3 benötigt.

    Grundsätzlich geht das.


    Folgende Punkte solltest du dabei beachten:

    • Am besten du nimmst dir dieses Tutorial als Vorlage, nur dass du keine Fahrzeuge lädst, sondern die Daten für die Pay 'N Sprays: [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-5
    • Statt OnPlayerEnterVehicle aus dem Tutorial musst du einen Timer erstellen, der z.B. einmal pro Sekunde prüft, ob ein Spieler in einer solchen Garage ist (IsPlayerInRangeOfPoint), oder alternativ den Vorgang nur starten, wenn der Spieler /repair eingibt.
    • Wenn ja, dann soll das Tor-Objekt der Garage geschlossen werden (MoveObject).
    • Dann erstellst du das Objekt, das den Rauch erzeugt und reparierst das Fahrzeug.
    • Danach öffnet sich das Tor wieder und das Geld wird abgezogen. Das Rauch-Objekt löschst du dann wieder.

    Deshalb das INSERT OR IGNORE Query zusammen mit einem primary key (id zum Beispiel).
    Das wird dann nur ausgeführt, wenn die Zeile mit der id nicht existiert.


    INSERT OR IGNORE INTO Settings VALUES (0, 0);


    Die Tabelle hat dann zwei Spalten, einmal id als primary key und als zweites die pSetting.

    Was ist daran falsch? Brauche ich fuer jeden Wert ne neue Variable?

    Nein, das Problem ist die Vorbelegung des Arrays im stock.
    Mache es so:
    stock TeleportPlayerToRandomPosition(playerid)
    {
    new Float:Z;
    new Float:rx1=((frandom((floatabs(MAP_WORLDBOUNDS[0][0]-MAP_WORLDBOUNDS[0][1])))+MAP_WORLDBOUNDS[0][1]));
    new Float:ry2=((frandom((floatabs(MAP_WORLDBOUNDS[0][2]-MAP_WORLDBOUNDS[0][3])))+MAP_WORLDBOUNDS[0][3]));
    MapAndreas_FindZ_For2DCoord(rx1,ry2,Z);
    SetPlayerPos(playerid,rx1,ry2,Z);
    }

    Wie kann ich das MapAndreas Include nutzen?

    new Float:z;
    MapAndreas_FindZ_For2DCoord(xCoord, yCoord, z);
    SetPlayerPos(playerid, xCoord, yCoord, z);




    Weiterhin eine andere Frage: Was fuer einen Return Wert hat sscanf?

    0 wenn alle Parameter korrekt eingegeben werden.
    Du kannst es dir auch per print ausgeben lassen.
    printf("sscanf: %d", sscanf(params, "d", id));





    Warum bringt das hier Errors?

    Versuche
    { COLOR_GREY },
    zu:
    COLOR_GREY ,


    Für alle natürlich.