Ich empfehle dir meinen Beitrag durchzulesen und die Fehler erstmal
alle abzuarbeiten (so wie es scheint, hast du dies bisher noch nicht getan).
Beiträge von Piranha
-
-
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);
} -
Hab hier mal ein Tutorial rausgesucht, welches GangZoneCreate hoffentlich gut erklärt: [TUTORIAL]Gangzone Erstellen ! [Für Anfänger]
-
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.479980Wir 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. -
Einfach den "Modulo"-Operator (%) nehmen.
Der macht genau das, was du willst.seks = PlayerInfo[playerid][pFriedhofZeit]%60;
-
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 )... -
Kann mich den anderen nur anschließen.
Schöne Umsetzung und ist auf jeden Fall nützlich.Habe letztens erst für eine Sprachauswahl solche Flaggen benötigt.
-
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, ...) -
Unter OnPlayerKeyStateChange abfragen, ob die gewünschte Taste gedrückt wird (ALT müsste im Fahrzeug "KEY_FIRE" entsprechen).
Und dann per GetVehicleVelocity die Geschwindigkeit vom Fahrzeug des Spielers herausfinden
und mit SetVehicleVelocity die Werte erhöhen (bspw. alle Werte mit 2 multiplizieren). -
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. -
Ich nehme mal an, dass du das MySQL Plugin R7 von BlueG / G-sTyLeZzZ heruntergeladen hast.
Die R7 unterstützt nur noch sog. "threaded scripts".Für das Tutorial hier einfach eine ältere Version (bspw. R6 oder R5) verwenden.
Wer sich mit der R7 beschäftigen bzw. ihre Vorteile nutzen will, kann sich dieses (englische) Tutorial mal anschauen:
Using BlueG's MySQL plugin R7 (with cache) -
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" -