Du solltest bei CheckBadWords auch ein true/1 als Rückgabewert benutzten, sofern da Wörter gefunden wurden.
Immer 0 zurückgeben, egal wie das Ergebnis bei CheckBadWords aussieht, wird dir in einer Bedingung nichts bringen.
Beiträge von Goldkiller
-
-
ocmd:setstats(playerid,params[])
{
/* -- */
if(sscanf(params,"us[144]",pID,str))return SCM(playerid,-1,"Fehler: /setstats [playerid/SpielerName] [name]"),SCM(playerid,-1,"[name]: Respektpunkte");
/* -- */
if(!strcmp(str,"Respektpunkte",true))
{
/* -- */
/* nachfolgende Zeile (versuch 1) kann nicht funktionieren. Du durchsuchst "params", was du ganz oben schon auf "us[144]" untersuchst hast.
Das klappt nicht, den String auf "d" und auf "us[144]" gleichzeitig erfolgreich zu scannen.
Eventuell erklärst du mal, was du damit vor hattest (oder du bleibst bei strtok, würde ich aber nicht machen).
Ohne jetzt aber den Sinn hinter "versuch 1" zu kennen, würde ich die Zeile entfernen.*/
if(sscanf(params,"d",wert))return SCM(playerid,-1,"Fehler: /setstats [playerid/SpielerName] [Respektpunkte] {FF0000}[Wert]");//versuch 1 -> Funktion wird hier durch beendet
if(sscanf(params,"us[144]d",pID,str,wert))return SCM(playerid,-1,"Fehler: /setstats [playerid/SpielerName] [Respektpunkte] {FF0000}[Wert]");//versuch 2
/* -- */
}
return 1;
} -
Da es bisher noch keiner gepostest hat:
Zitatmysql_escape_string(Spielername(playerid), Spielername(playerid));
format(query, sizeof(query), "SELECT * FROM user WHERE username='%s'", Spielername(playerid) /* In dieser Zeile nur das Spielername() */ );
Das funktioniert nicht so wie du es möchtest. Spielername ist eine Get Funktion, nicht Set. -
6 Jahre studieren ? Da hast du dich aber ganz ganz schlecht erkundigt.
-
Zitat
Zum ersten Punkt, das liegt daran das ich mehrere Werte brauchte um genau zu sein 4 Stück.
ZEPA ist für den horizontale Antrieb ZEPH für den vertikalen Hantrieb (Heckantrieb).
Du benutzt aber nirgendwo alle 4. Du benutzt nur 3.
0b00, 0b01 und 0b10. Niemals aber 0b11 ( binär ausgedrückt ), um gleichzeitig horizontal und vertikal zu nutzen.
Denn würdest du es parallel nutzen wollen (0b11) , würde bei switch noch fehlen:
case: (pUSE_ZEPH | pUSE_ZEPV)ZitatDen Sinn hinter Punkt 2 versteh ich irgendwie nicht da dies die Plakate sind und diese nicht erweitert werden.
Was macht der markierte Bereich ? Das ist von pastebin kopiert. Entweder da fehlt etwas oder ich verstehe nicht,was das bewirkt. Ansonsten ist auch so nicht ganz klar, was /mycommand bewirkt.Punkt 3 und 4 hast wohl unter den Tisch fallen lassen :/.
-
enum ZEP(<<= 1){
pUSE_ZEPA=1,
pUSE_ZEPH,
};
Kann nicht erkennen, wieso du Bitshiften benutzt. Weder bei /start,/go,/stop,/use noch /leave setzt du die beiden Stati parallel. Sieht man ja auch nicht zuletzt an Zeile 369.
Das ist nur unnötig kompliziert für Leute zu lesen,die sich damit nicht auskennen.[pwn=297] Attach
E_STREAMER_ATTACHED_OBJECT
return 1;
[/pwn]
Da fehlt doch etwas oder nicht ?[pwn=250]if(strcmp("/start", cmdtext, true, 10) == 0)[/pwn]
Die 10 solltest da mal weg machen oder durch eine 6 ersetzen.Was passiert wenn mehr als 1 Person gleichzeitig einen Zepelin steuern möchten ? Kann ich Jemand anderen behindern beim steuern ?
Würde auch einige Anweisungen ein Schleifen packen (zB 234 bis 241), ist aber geschmackssache.
Spoiler anzeigen Aber hauptsache 10/10 Punkten vergeben ohne es objektiv zu bewerten oder zu testen -
Meinst du nicht,dass das hier einfacher wäre:
SetPVarInt(playerid,"Team",2);
als
SetPVarInt(playerid,"Team2",1);
?
Letzter führt nur zu Problemen. Außerdem musst du immer sicher stellen,dass nicht gerade nich "Team1" auf 1 gestellt ist.Da du anscheinend zwei Teams hast, solltest du dir das Ausgleichen der Teams nochmal überlegen. Es sieht für mich nämlich so aus,als würden die ersten 5 Spieler immer in Team 1
laden und die Spieler danach in Team 2.
Mmn wäre es besser, immer abwechselnd einen Spieler in Team 1 und dann Team 2 zu platzieren.Das von Mr.Resse o. DT Sniper stimmt natürlich :-0
-
Generell ist das aber keine saubere Lösung.
Die meisten haben sowieso ein Array / Funktion, durch die man an Hand der ModelID den Fahrzeugnamen bekommt.
Es ist einfacher,nur die ModelID und den Preis abzulegen. Über die ModelID kannst du den Namen auslesen und sparst dir nervige arbeiten.http://pastebin.com/GqkjeAkV
Dort das Array VehicleNames.
printf( VehicleNames[ 512 - 400] ); // Cropduster
Die -400 kommt,da die Fahrzeug-IDs erst bei 400 beginnen.
Bei dir könnte es so sein:
enum test
{
fahrzeugmodel,
fahrzeugpreis
};
new NewTest[][test] =
{
{ 496 ,1000} // blista compact
};
// Im Code
print( VehicleNames[ NewTest[0][fahrzeugmodel] - 400 ] ); // Müsste Blista Compact ausgeben.Mit der ModelID kann man viel mehr anfangen, als nur mit dem Fahrzeugnamen.
-
Ich hab das Zitieren ausgeschaltet und für dich gilt ebenfalls die Edit-Regel.
Mit dem Query bekommst du nicht nur 1 Ergebnis, sondern bis zu 5. Es ist wie ein Array zu verstehen, sodass du jeden Einzelnen Index durchgehen musst.
Du musst eine while-Schleife in Verbindung mit mysql_fetch_row nutzen, um alle Ergebnisse zu erhalten.
Spoiler anzeigen Neben while würde auch sicherlich for etc funktionieren.
Da ich nicht weiss welches MySQL Plugin + Version du nutzt, kann ich dir auch kein passendes Wiki Beispiel verlinken.
Vom Prinzip her sieht es aber so aus:
http://wiki.sa-mp.com/wiki/MySQL#mysql_fetch_row_format
while( mysql_fetch_row(get) ) {
print(get);
}
mysql_free_result(); -
Deine Beschreibung ist nicht gerade gut.
Du kannst nicht die Anzahl an Benutzern in der Datenbank benutzen, um ein Array dieser größe dynamisch anzulegen.
Die Arbeit der Top-List kann man auch der Datenbank übergeben:
ORDER BY
SQL TOP / LIMITDas könnte dann sowas sein:
SQL-- TOP 10 Spieler am Score gemessen. SELECT `Name`,`Score` FROM `Users` ORDER BY `Score` DESC LIMIT 10
Damit hast du dann schon alle Ergebnisse sortiert und musst die "nur noch" ausgeben. -
OnPlayerCarUpdate != PlayerCarUpdate.
Installier crashdetect richtig und lass den Server nochmal crashen. Dann bekommst du bessere Informationen, zB die Zeile durch den der Fehler verursacht wurde.
http://forum.sa-mp.com/showpost.php?p=1253632&postcount=7"%s`AH_Meter` = %d "
Dort fehlt eventuell ein Komma for `AH_Meter`. -
Zitat
buyInfo[playerid][buy_x]
Du bist bestimmt selber mit playerid 0 unterwegs, deshalb geht es. Wenn du zeigst wie buyInfo aussieht, kann man zumindest mit Sicherheit sagen,dass playerid als Index richtig oder falsch ist.
Glaube aber kaum,dass du playerid als Index für buyInfo nehmen solltest bzw es so aufgebaut hast.
Sonst würdest du ja keine Schleife verwenden,richtig ;)? -
Kannst es gern probieren. Es ist aber a) nicht einfach und b) in PAWN (mMn) schwer umsetzbar wegen der Laufzeit der Algorithmen für ein solche Navigationssystems.
Spoiler anzeigen Hab es selber mal gemacht, glaube kam bei 2000 Nodes nicht unter 50ms pro Berechnung :{Wenn du die Funktion nicht aufrufst und sie mit stock gekennzeichnet ist, wird die nicht kompiliert bzw "weggeworfen". Das ist nämlich der Sinn hinter stock.
Dafür habe ich sogar mal Tutorial geschrieben ... [TUT] Der Mythos stock -
Ich weiß, es wird schon sehr viele Navigations Systeme geben, aber naja meine Langeweile war dadurch weg von daher.
Es gibt fast keine Navigationssysteme die auch wirklich wie ein Navigationssystem funktionieren. Deins im übrigen auch nicht. Trotzdem sind die Namen immer irreführend.
Ich mein, bist du schon mal mit dem Auto unterwegs gewesen und wolltest zu Punkt A, dir wurde aber keine Route angezeigt angezeigt sondern lediglich der Zielpunkt auf der Karte?stock CreatePlayerText(playerid)
{
#if defined GPSTacho
[...]
Ruf die Funktion doch erst gar nicht auf, wenn GPSTacho nicht definiert ist (OnPlayerConnect). Da es dann sowieso noch eine stock Funktion ist, fällt die beim kompilieren eh raus wenn sie nicht genutzt wird. -
Zitat
Naja Pawn hantiert komisch mit Floats...und für Neulinge ist das immer ein bisschen schwierig, deshalb habe ich es einfach mit 2 Integern gelöst
Floats für was ?mein_meter_stand = 14345 | Integer
mein_meter_stand / 1000 = 14 | Integer / Integer = Integer
mein_meter_stand / 1000.0 = 14,345 | Integer / Float = Float , da wird automatisch umgestellt auf Floats. -
Niemand sollte Meter getrennt von Kilometer zählen.
Das gleiche gilt auch für Zeiten, sieht man im Forum auch zu häufig. Es gibt Basiseinheiten (?), die im Fall Länge Meter und Zeit Sekunden sind. Von der rechnet man in andere Maßstäbe um.km_Info[0][vehicleid] = 0; // NUR meter speichern
// weg damit km_Info[1][vehicleid] = 0;
Von Meter auf Kilometer:
Meter / 1000 = Kilometer. -
Hab den Code mal überflogen.
for(new i = 1; i <= MAX_JOBS; i++)
Das machst du ganz oft und ist leider ganz oft falsch.
1) Warum nutzt du den Index 0 nicht?
2) Mit <= ist ein Index out of Bounce vorprogrammiert.
MAX_JOBS hast du auf 25 festgelegt. Das heißt, du kannst als Index 0 bis MAX_JOBS-1 verwenden. Das ist 0 bis 24.
In der Schleifer geht es aber bis <= , somit bis 25. 25 ist aber ein nicht erlaubter Indexwert.
Gleiches gilt auch für
for(new o=1; o <= MAX_CPS; o++)
bei zB jobloeschen. Genau genommen hast du durch den Fehler immer einen weniger als durch MAX_* angegeben.
MAX_JOBS 25 -> Man kann aber nur 24 nutzen
MAX_CPS 25 -> Man kann aber nur 24 nutzen
Der Fehler wirkt sich bestimmt noch an ein paar Stellen im Code aus.Normalerweise sollte es so aussehen:
for(new o; o < MAX_CPS ; o++) { }
for(new i; i < MAX_JOBS ; i++) { }for(new i=1; i <= 5; i++) // z.B. Zeile 599
Wieso nimmst du 5 und nicht MAX_CPS ? -
Deiner (Azure) Einstellung nach hätte ich dann aber zB auch Niemanden helfen sollen, da ich selber ja nie in einem Thread nach Hilfe gefragt habe .
Wieso hier 5 oder 6 gewählt wird, versteh ich nicht so ganz. Wenn ich es so schlecht finde, wieso sollte ich dann hier bleiben? Hier ist keiner verpflichtet sich im Forum rumzutreiben.
ZitatSpoiler anzeigen 1 (am besten)
6 (am schlechtesten)Spoiler anzeigen
"am besten","am schlechtesten" ... In Schulnoten ist aber eine 1 "Sehr Gut" und 6 "Ungenügend".
-
Ja, gerne Rag3Mod3 ...
-
Da hier nichts von Bezahlung steht, falscher Bereich und Closed.