(von dem Platz, nicht von der Zeichenlänge)
strlen würde nicht funktioninieren.
Ob ich nämlich in der zweiten Spalte "iiiiiiii" oder "MMMMMMMM" habe, macht einen großen Unterschied.
(von dem Platz, nicht von der Zeichenlänge)
strlen würde nicht funktioninieren.
Ob ich nämlich in der zweiten Spalte "iiiiiiii" oder "MMMMMMMM" habe, macht einen großen Unterschied.
Guten Abend,
ich möchte einen Dialog mit Tabellen erstellen, bei dem Werte aus einer Datenbank gelesen werden,
und diese dann in die Tabelle gelistet werden.
Die Kategorien unterteile ich mit \t.
Das Problem ist allerdings, dass sobald ein ausgelesener Wert länger (von dem Platz, nicht von der Zeichenlänge)
ist, rückt die ganze Spalte eins zuviel nach rechts.
Danke im Vorraus.
Nicht direkt.
Es würde helfen, wenn du heraussuchst was bei dem Callback "OnPlayerText" und bei "OnPlayerCommandText" unter dem Befehl /c steht.
1. Du brauchst nicht jeden Wert in ´´ bzw. '' angeben.
Zeichnketten musst du in '' angeben, den Rest nicht (es sei denn der Feldname ist ein "spezielles" Wort wie z.B. SELECT)
Außerdem kannst du die Leerzeichen wegmachen, das spart Platz:
UPDATE accounts SET Level=%d,Geld=%d,Adminlevel=%d,Language=%d,Cop=%d,Banned=%d,Bank=%d WHERE Name='%s'
2. Damit MySQL nach dem ersten Fund nicht weitersucht, kann
an den Query gehängt werden. Der muss sich ja nicht totsuchen
3. Wenn du zwischen Groß- und Kleinschreibung unterscheiden möchtest,
verwende statt "WHERE Name='%s'":
4. Alle Zeichketten sollten mit mysql_real_escape bzw. mysql_format in Verbindung mit %e überprüft werden,
weil es sonst sein kann, dass ein Syntax-Fehler auftritt.
Beispiel:
Admin A bannt User A mit dem Banngrund: "Beleidigung: 'Trottel'"
Der Syntax würde dann so aussehen:
Das gäbe ein Syntaxfehler (ich hoffe es ist verständlich warum).
5. Werte aus den Tabellen sollten mit
herausgelesen werden. Das geht schneller und ist besser fürs Script.
6. Wenn der Spieler connected, sollte zuerst überprüft werden ob der Spieler existiert.
Wenn nicht, wird er in die Datenbank eingetragen (INSERT INTO...).
Wenn er existiert wird das Passwort herausgelesen und abgefragt.
Hoffe ich konnte dir ein paar Tipps geben
SELECT * FROM memberstabelle WHERE fraktion = 1
Das wäre ein einfaches SQL-Statement.
Dann musst du das Ergebnis noch fetchen (in einem Array) und dieses Array ganz normal per for-schleife durchlaufen.
Du brauchst doch nicht alles..
@Fly2lifeHigh: Ich würde es vermeiden Nachrichten in Schleifen auszugeben
Achso, entschuldige bitte, habe die Klammern übersehen.
Funktioniert
Dankeschön!
Guten Abend,
ich habe folgendes Problem:
Ich möchte ein define machen, jedoch ergibt es Fehler, wenn ich ein ! vor der Funktion schreibe,
Wie kann ich das ändern?
#define strlost(%0) param>%0 // param ist eine Variable die vorher definiert wurde.
//Verwendung:
if(strlost(5)) // funktioniert
{
//blabla
}
if(!strlost(8)) // ERROR!
{
//blablabla
}
Bin mir nicht sicher, aber vielleicht würde ja das hier funktionieren:CallLocalFunction("OnPlayerCommandText", "ds", playerid, "/timestamp");Kommt halt drauf an ob es möglich ist darüber SA:MP interne Befehle aufzurufen/auszuführen.
Falls es geht kann man endlich den Chat vom Script aus ausblenden
Funktioniert nicht.
Funktioniert, danke
Ist eigentlich egal warum ich die Variable erstelle.
Ich weiß wie man das Problem bzw. den Fehler löst,
aber ich möchte verstehen warum mir pawn einen Error zeigt.
Das ist nämlich für mich überhaupt nicht logisch.
Hallo,
ich suche eine Funktion die die Wörter in einer Zeichenkette zählt.
Beispiel:
new string[56]="Das ist ein Beispieltext."; // 4 Wörter
string="Das ist ein weiterer Text ."; // 6 Wörter
string=" letzter Beispiel text"; // 3 Wörter
Dankeschön
Wenn ich in die erste Schleife
new string[5];
hineinschreibe, erscheint der Fehler nicht.
Und wenn ich die stringvariable verwende bleibt der Fehler.
Die erste Integervariable i wird erstellt, wenn die Schleife ausgeführt wird und gelöscht, wenn sie beendet wurde.
Sie existiert also nur dann, wenn die Schleife aktiv ist. Das bedeutet, sobald die erste Schleife fertig ist,
kann ich theoretisch problemlos eine neue gleichnamige Variable erstellen.
Beispiel:
for(new i=0;i<5;i++)
{
}
for(new i=0;i<5;i++)
{
}
Keine Errors, keine Warnings. Ist ja auch logisch, die Variable ist nur in der Schleifenebene gültig.
Aber warum kommt der Error, wenn ich in der Schleife eine zweidimensionale Integervariable erstelle?
@Music4You:
Richtig, könnte ich, das beantwortet aber leider nicht meine Frage
new AutoIDs[]=
{
400, 409, 415, 422, 434, 442, 459, 475, 482, 492,
401, 410, 418, 423, 436, 444, 466, 477, 483, 494,
402, 411, 419, 424, 438, 445, 467, 478, 489, 495,
404, 413, 420, 426, 439, 451, 470, 479, 490, 496,
405, 414, 421, 429, 440, 458, 474, 480, 491, 500,
502, 503, 504, 505, 506, 507, 516, 517, 518, 525,
526, 527, 528, 529, 532, 533, 534, 535, 536, 540,
541, 542, 543, 545, 546, 547, 549, 550, 551, 552,
554, 555, 556, 557, 558, 559, 560, 561, 562, 565,
566, 567, 568, 575, 576, 579, 580, 582, 585, 587,
589, 596, 597, 598, 599, 600, 601, 602, 603, 604,
605
};
public OnPlayerStateChange(playerid,newstate,oldstate)
{
if(newstate==PLAYER_STATE_DRIVER)
{
new vehicleid=GetPlayerVehicleID(playerid);
new model=GetVehicleModel(GetPlayerVehicleID(playerid));
for(new i=0;i<sizeof(AutoIDs);i++)
{
if(model==AutoIDs[i])
{
SendClientMessage(playerid,-1,"Du bist in ein Auto eingestiegen.");
break;
}
}
}
}
Wo soll ich strings sonst verwenden, wenn nicht in "Funktionen"?
Du meinst, es ist sicherer immer einen Array mehr zu definieren um in ihr den Null-Character bzw. EOS einzuspeichern,
damit der zugesicherte Speicher für die Variable nicht überschritten werden und so Fehler auftreten, auch wenn
es in diesem Beispiel einwandfrei funktioniert?
Hallo,
mir ist eben aufgefallen, dass man in pawn garkeinen Null-Character am Ende braucht.
new teststring[6];
for(new i=0;i<6;i++)
{
teststring[i]='.';
}
print(teststring);
printf("%i",strlen(teststring));
printf("'%c'",teststring[5]);
Serverlog:
Stimmt das jetzt oder was habe ich übersehen?