Beiträge von Piranha

    Ich empfehle dir meinen Beitrag durchzulesen und die Fehler erstmal
    alle abzuarbeiten (so wie es scheint, hast du dies bisher noch nicht getan). ;)

    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd:fahrstundeauto(14, cmdtext);
    return 0;
    }
    Falsche Syntax... richtig wäre:
    dcmd(fahrstundeauto, 14, cmdtext);


    Achja in deiner sscanf-Funktion wird die Variable params doch verwendet, wofür also #pragma unused params?
    Dazu kommt noch, dass die beiden Strings "string" und "string2" als Integer erstellt wurden statt als wirkliche Strings.


    SendClientMessage(playerdi, COLOR_LIGHTBLUE, string2);
    Der Flüchtigkeitsfehler hier sollte von selbst auffallen.


    GetPVarInt(pID,"fahrstundeauto") = 1;
    Willst du den Wert der PVar setzen? Wenn ja, dann verwende die Funktion SetPVarInt.
    GetPVarInt gibt dir nur den Wert der PVar zurück.

    Deine Skin-Abfragen stehen sich hierbei selbst im Weg.


    Angenommen der Spieler hat den Skin 105, dann trifft die erste Abfrage zu und der Spieler bekommt Skin 106.
    Dann wird geprüft, ob er Skin 106 hat. Stimmt wieder und er bekommt deshalb Skin 107.
    Dann wird erneut geprüft und zwar, ob er Skin 107 hat. Auch das stimmt und er ist wieder am Anfang bei Skin 105.


    Daher sollte man hier Gebrauch von 'else' machen. Alternativ könnte man die Funktion auch einfach
    vorzeitig mit 'return' verlassen, wenn danach nichts mehr ausgeführt werden soll.


    if (GetPlayerSkin(playerid) == 105) // "erste Bedingung"
    {
    SetPlayerSkin(playerid,106);
    }
    else if (GetPlayerSkin(playerid) == 106) // wird nur geprüft, wenn die erste Bedingung nicht zutrifft
    {
    SetPlayerSkin(playerid,107);
    }
    else if (GetPlayerSkin(playerid) == 107) // wird nur geprüft, wenn die beiden vorherigen Bedingungen nicht zutreffen.
    {
    SetPlayerSkin(playerid,105);
    }

    Mit vertauschen meinte ich nicht ersetzen.
    Die Zeile kann so bleiben, du musst dann lediglich die Datensätze ändern.


    XM = -1997.079956, YM = -1999.479980, XN = -2016.380004, YN = -2015.930053
    Bei diesem Datensatz beispielsweise muss XM die Seite bzw. der Rand im Westen der Gangzone sein.
    YM die Seite bzw. der Rand im Süden..
    XN im Osten..
    YN im Norden..
    Darauf musst du dann bei jeder Gangzone achten, wenn du dir die Koordinaten holst.


    Der richtige Datensatz sieht dann so aus:
    XM = -2016.380004, YM = -2015.930053, XN = -1997.079956, YN = -1999.479980


    Wir gehen hierbei davon aus, dass GangZoneCreate so aussieht:
    GangZoneCreate(XM, YM, XN, YN);


    Habe hier jetzt mal schnell eine Skizze erstellt, die das ein wenig veranschaulichen soll:

    Hoffe, dass du es verstehst, da ich es nicht besser erklären kann. :)

    Ah ich sehe das Problem.. es liegt an den Gangzonen.
    Wenn du deine Ganggebiete so erstellst:
    GangZoneCreate(GangGebiet[GangRevier][GangRevier_XM],GangGebiet[GangRevier][GangRevier_YM],GangGebiet[GangRevier][GangRevier_XN],GangGebiet[GangRevier][GangRevier_YN]);
    Dann muss der erste Parameter (GangRevier_XM) die Seite der Gangzone sein, die am Weitesten im Westen liegt, da es den Rand für den Westen festlegt;
    GangRevier_YM ist der südliche Rand der Gangzone;
    GangRevier_XN ist der östliche Rand der Gangzone;
    GangRevier_YN ist der westliche Rand der Gangzone.
    (http://wiki.sa-mp.com/wiki/GangZoneCreate)


    Wenn bei diesem Datensatz:
    Gebiet geladen; ID = 1, XM = -1997.079956, YM = -1999.479980, XN = -2016.380004, YN = -2015.930053
    also XM mit XN und YM mit YN vertauschen würdest, würde es funktionieren. ;)


    Mit freundlichen Grüßen,
    Piranha.

    Auf den ersten Blick fällt mir jetzt nichts auf.
    Würde mal gerne einen der Datensätze aus der Datenbank sehen.


    Und lass dir mal zwischen diesen beiden Zeilen (Z. 31-32)strdel(result,0,sizeof(result));
    GangRevierids++;
    mit printf("Gebiet geladen; ID = %i, XM = %f, YM = %f, XN = %f, YN = %f",GangGebiet[GangRevierids][GangRevier_ID],GangGebiet[GangRevierids][GangRevier_XM],GangGebiet[GangRevierids][GangRevier_YM],GangGebiet[GangRevierids][GangRevier_XN],GangGebiet[GangRevierids][GangRevier_YN]); ausgeben, welche Daten er tatsächlich lädt und poste das Ergebnis hier.

    for(new GangRevier=1;GangRevier<MAX_GANGGEBIETE;GangRevier++)
    Gibt es einen Grund, warum die for-Schleife bei 1 anfängt ?
    Die sollte wohl eher bei 0 anfangen.


    Ansonsten müssten wir mal den Code sehen, wo alles geladen wird (um mögliche Fehler dort auszuschließen).
    Achja, wofür wird GangRevier_ID verwendet? Scheint hier irgendwie überflüssig zu sein und verbraucht damit unnötig Speicher.

    Schau dir mal die Admin-Abfrage an:
    if(GetPVarInt(playerid,"Adminlevel")==2)


    Du fragst ab, ob der Spieler, der den Befehl ausgeführt hat, Admin ist.
    Also playerid durch i ersetzen.



    @Larso99:
    Was soll das bringen aus irgendeinem Script (oder sonst woher) den Befehl zu kopieren?
    Er will seinen Fehler finden und korrigieren und nicht einfach irgendwas kopieren (hoffe ich zumindest ;) )...

    Hätte noch kleine Verbesserungsvorschläge, die mir spontan eingefallen sind:


    # Wenn man auf einen Button klickt, sollte man auf der Webseite gefragt werden, ob man das Projekt XY wirklich liken möchte
    # Der Projektname sollte auf den Like-Buttons stehen (mglw. mit Optionen wie Textfarbe, Größe, Position, ...)

    Ich hoffe, du kommst selbst auf die Antwort, wenn du diese beiden Zeilen miteinander vergleichst (darauf achten, wie du die Platzhalter durch die Zeichenketten ersetzt):
    format(ClickText, sizeof(ClickText), "Name: %s", Sname[clickedplayerid]);
    format(ClickText3, sizeof(ClickText3), "Adminrang: %s", dtext);


    Lösung
    format(ClickText, sizeof(ClickText), "Name: %s", Sname);

    Der Fehler liegt beim formatieren der Nachricht.


    Schau dir die Zeile nochmal genau an:
    format(ClickText, sizeof(ClickText), "Name: %s", Sname[clickedplayerid]);


    Wie ich sehe bist du also die ID 1 beim Testen gewesen.
    Bei der ID 2 wären die ersten beiden Buchstaben nicht angezeigt worden.
    Bei ID 3 die ersten 3 nicht; usw...
    Bei ID 0 wäre der Fehler wohl nicht aufgetreten.


    Sname[clickedplayerid] sieht, wenn clickedplayerid dem Wert 1 entspricht, nämlich so aus: Sname[1].
    Das wiederum würde bedeuten, dass er den string 'Sname' ab der zweiten (da man in PAWN bei 0 anfängt zu zählen) Stelle anzeigt.

    Wenn du Incognito's Streamer Plugin verwendet, verfügt CreateDynamicObject extra einen Parameter für die Welt (worldid).
    Standartmäßig ist die Welt auf -1; dadurch wird das Objekt in allen Welten angezeigt. Wenn man es nur in einer bestimmten Welt sehen soll, einfach
    einen eigenen Wert für die Welt angeben.


    native CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0);
    Quelle: http://forum.sa-mp.com/showthread.php?t=102865

    Dominik.
    Möglicherweise ist meine Erklärung nicht ganz rübergekommen.


    printf("test %07d", 35); // Ausgabe: "test 0000035"
    Bei diesem Beispiel werden die Nullen von selbst hinzugefügt und zwar so viele, dass die Zahl (35) zusammen mit den Nullen 7 Stellen ergibt.
    Da braucht man selbst nichts mehr ausrechnen. Wenn man statt der Zahl 35 die Zahl 101 ausgeben lässt, würde die Ausgabe trotzdem auf insgesamt 7 Stellen kommen.


    Mal konkret auf deinen Fall bezogen:
    printf("$%08d", 15); // Ausgabe: "$00000015"

    Bei der Formatierung zwischen dem %-Zeichen und dem Buchstaben des Platzhalters (bspw. "d") eine Zahl angeben, dann wird der
    auszugebenden Zahl bei Bedarf so viele Leerzeichen vorangestellt, dass die Ausgabe mindestens solang ist wie die angegebene Zahl.


    Beispiel mit printf:
    printf("test %3d", 5); // Ausgabe: "test 5"


    Wenn man vor die Zahl noch eine Null schreibt, werden statt Leerzeichen der Zahl Nullen vorangestellt.


    Beispiele:
    printf("test %05d", 205); // Ausgabe: "test 00205"
    printf("test %07d", 35); // Ausgabe: "test 0000035"