Wie lade ich einen string bei mysql ?
cache_get_value_name(row, "spaltenname", dest);
Bei Arrays mit enums:
cache_get_value_name(row, "spaltenname", pInfo[playerid][Name], LAENGE_HIER_ANGEBEN);
Wie lade ich einen string bei mysql ?
cache_get_value_name(row, "spaltenname", dest);
Bei Arrays mit enums:
cache_get_value_name(row, "spaltenname", pInfo[playerid][Name], LAENGE_HIER_ANGEBEN);
Und dabei ist es unerheblich ob da noch n index zwischen ist oder nicht.
Der Code aus der Frage hat diesen Index, und das führt unweigerlich dazu, dass eine direkte Zuweisung nur dann geht, wenn die deklarierte Länge exakt der zugewiesenen Länge (plus EOS) entspricht, sonst nicht.
Deine Beispiele sind alle schön, haben nur alle nichts mit der Frage zu tun. Ich habe bei deinen Beispielen auch nie behauptet, dass diese nicht funktionieren. Lediglich die direkte Zuweisung, wie sie im Code von JacLos verwendet wird und auch exakt so in meinem Beispiel wiedergegeben wird, funktioniert nicht. Darum ging es, nicht um sonst irgendwelche Zuweisungen, die du in deinen Beispielen bringst. Dass diese funktionieren tut nichts zur Sache, dass der explizit geforderte Anwendungsfall eben nicht mit einer direkten Zuweisung funktioniert.
Damit ist diese - mal wieder - völlig sinnfreie Diskussion für mich beendet. Eine direkte Zuweisung ist in diesem expliziten Fall nicht möglich (außer bei exakter Länge). Das kannst du einsehen oder auch nicht. Fakt ist, es geht nicht.
Ende.
Das macht keinen Unterschied.
Natürlich macht es das.
enum tEnum {
e_Name[MAX_PLAYER_NAME] //24 Zeichen
};
new testArray[MAX_PLAYERS][tEnum];
testArray[playerid][e_Name] = "Ich bin 23 Zeichen lang"; //geht
testArray[playerid][e_Name] = "Ich bin kürzer"; //geht nicht
Ist ja kein Problem.
Ist wieder nicht das gleiche. In deinem Beispiel hat das Array keinen Index für die playerid.
Nein, das geht solange das Array das du zuweisen willst kleiner ist, als das wo es rein soll.
Nicht in dem Fall. Probiere es aus bevor du etwas behauptest. Dein Beispiel nutzt keine enums und kein mehrdimensionales Array.
Daher rate ich grundsätzlich zu format, auch wenn es langsamer ist.
Das mit dem strcat ist ein richtig schlechter Ratschlag, denn sobald das 2x aufgerufen werden sollte...hat der das 2x da drinnen stehen.
Natürlich muss man sich den Funktionen bewusst sein.
In dem Fall, dass man es zweimal setzt, müsste man die Variable vorher leeren. Aber gut, habe es angepasst, damit keine Missverständnisse auftreten.
und format ist ultra lahm, wieso nicht einfach durch eine direkte Zuweisung lösen.
Weil es nicht geht, probiere es doch aus.
Das geht nur, wenn deine direkte Zuweisung exakt die Länge MAX_PLAYER_NAME-1 (wegen EOS) hat.
Wird das Enum dann auch Global gesetzt im Script also kann ichs dann auch abspeichern und
in nem anderen public verwenden ?
Ja.
PlayerInfo[playerid][pFunktionName] = "namebeispiel";
zu:
format(PlayerInfo[playerid][pFunktionName], MAX_PLAYER_NAME, "namebeispiel");
oder:
PlayerInfo[playerid][pFunktionName] = '\0';
strcat(PlayerInfo[playerid][pFunktionName], "namebeispiel", MAX_PLAYER_NAME);
Was dir lieber ist.
Schutzfolien für die FZ1000.
Ich bin echt begeistert von der Kamera, und ich habe kaum mehr als die Standardfunktionen bisher ausprobieren können.
Das mit dazu gekaufte Buch arbeite ich jetzt Stück für Stück durch.
Wie kann man es Scripten, dass wenn ich einen runden Tacho habe sich die Tachonadel zu der Zahl bewegt so schnell wie das Fahrzeug fährt?
Du musst die Geschwindigkeit in einen Winkel ausgehend vom Startwinkel berechnen. Stelle dir dabei einen Kreis vor.
Dann ist 0 km/h z.B. bei 40 Grad, wenn man davon ausgeht, dass 0 Grad unten ist. 100 km/h ist dann bei 180 Grad und 200 km/h bei 320 Grad.
Entsprechend hast du 1,4 Grad pro 1 km/h. Je nach Maximalgeschwindigkeit können das natürlich andere Werte sein.
Dann rechnest du die Punkte auf deiner Kreisbahn aus, mittels Winkel und Radius des Tachos.
Siehe dazu hier: https://www-user.tu-chemnitz.d…phics/theorie/dg_ber.html
In der Regel ist 0 Grad ganz oben, daher müsste bei der Rechnung +/- 180 Grad Modulo 360 gemacht werden, dass das stimmt. Sprich 0 km/h wäre bei 220 Grad und 100 km/h bei 0 Grad, etc.
Natürlich müsste man mehrere Kreisbahnen mit unterschiedlichen Radien haben, um eine Nadel darzustellen.
Die Textdraws der Nadel müssen immer wieder gelöscht und an die neue Position auf dem Kreis gesetzt werden.
Wie bekomme ich auf das Textdraw diese Striche bei den Zahlen, damit die so schräg sind?
Mit den Zeichen, die dir zur Verfügung stehen in Textdraws.
Einfallen würden mir da spontan: / \ - | _
Mit etwas Verzerren über die Schriftgröße kann man das sicher recht gut hinbekommen.
Jetzt steht da Du bist bei keinem Gang Waffen Info Punkt. aber ich krige ich waffen.
Hast du das return 1 in der Schleife nach dem SendClientMessage drin?
Das kann dann nämlich nicht passieren.
Übrigens, du kannst die Geld-Abfrage auch noch aus der Schleife nehmen und davor abfragen, ob er genug Geld hat.
du versteht es nicht warte ich schicke es komplett
Jetzt ist es klar. Ich bin davon ausgegangen, dass es sich um ein zusammenhängendes Stück handelt, so ist es klarer.
Dann liegt die Vermutung nahe, dass du nicht nahe einem der Punkte bist und der Befehl einfach "durchläuft".
Versuche es so:
if(strcmp("/ausruesten", cmd, true) == 0) // bei diesem befehl wird nur angezeigt das dies nicht Existiert.
{
if(PlayerInfo[playerid][pGunLic] == 0)
{
SendClientMessage(playerid,COLOR_ERRORTEXT,"Du hast keinen Waffenschein oder einen Waffenschein entzug.");
return 1;
}
for(new i=0; i<sizeof(GangWaffenInfo); i++)
{
if(IsPlayerInRangeOfPoint(playerid,2.0, GangWaffenInfo[i][GHWAusgangX], GangWaffenInfo[i][GHWAusgangY], GangWaffenInfo[i][GHWAusgangZ]))
{
if(PlayerInfo[playerid][pCash] > 2000)
{
GivePlayerWeapons(playerid,24,120);
GivePlayerWeapons(playerid,25,50);
GivePlayerWeapons(playerid,29,150);
GivePlayerWeapons(playerid,31,120);
I_SetPlayerHealth(playerid,180);
GivePlayerMoneys(playerid,-2000);
SendClientMessage(playerid,COLOR_LIGHTBLUE,"Du hast dir Waffen und 180 HP gekauft! für 2000$");
return 1;
}
}
}
return SendClientMessage(playerid, COLOR_ERRORTEXT, "Du bist bei keinem Gang Waffen Info Punkt.");
}
Des halb schrieb ich ja
Das habe ich gesehen, das habe ich ja mit Block 1 und 2 beschrieben.
Zähle die Klammern nach, zwischen Befehl Beginn und else. 5 gehen auf und 6 gehen zu.
Also ich sehe da das 5 Auf gehen und 5 wieder zu gehen
Ich sehe 6.
Im ersten Code Block sind es 5:5 das stimmt schon, aber vor dem else steht im zweiten Code Block noch eine Klammer zu, damit sind es 6.
Daher die Vermutung, dass dein Befehl innerhalb des vorherigen Befehls steht und damit nicht aufgerufen wird.
oh ne habe es hier falsch gepostet
Es gehen weiterhin 5 Klammern auf aber 6 Klammern zu, vom Befehl bis zum else.
Achte bitte zukünftig auch darauf, deinen Code sauber formatiert zu posten.
Hier bei mir wird nur bei diesem Befehl angezeigt das dies nicht existiert. obwohl es ja Existiert
Der Anzahl der Klammern nach, hast du den Befehl eine Klammer zu weit zu Beginn verschachtelt, vermutlich steht er innerhalb des vorherigen Befehls.
Hast du vlt für die Frage meines Scripters brand. auch ne Lösung parat?
Die Abfrage kannst du so schreiben:
if(strfind(inputtext, ",") != strlen(inputtext)-3) //Komma nicht an der richtigen Stelle, oder keine zwei Nachkommastellen angegeben
An die Cents kommst du so hin:
new cents[3], cent, len=strlen(inputtext);
strmid(cents, inputtext, len-2), len-1);
cent = strval(cents);
Zusätzlich wäre es noch zu empfehlen, vor der ganzen Abfrage noch IsNumeric in Form von IsNumericFloat zu nutzen, sprich Das sin die Funktion noch das Komma aufgenommen wird. Das verhindert, dass jemand Buchstaben eingibt.
Ist es irgendwie möglich, das auch die Farbe richtig angezeigt wird welche das Fahrzeug hat, z.B. wenn ich in einm roten Sultan sitze?
Ja, das kannst du mit
http://wiki.sa-mp.com/wiki/PlayerTextDrawSetPreviewVehCol
machen.
Nutze zusätzlich für GetVehicleColor folgende Include:
http://forum.sa-mp.com/showthread.php?t=339088
warum bekomme ich bei folgendem Befehl diese Fehlermeldung?
Das kann so nicht direkt zugewiesen werden.
Mache es so:
PlayerInfo[pID][pReason] = '\';
strcat(PlayerInfo[pID][pReason], reason, 40);
oder:
format(PlayerInfo[pID][pReason], 40, reason);
Allerdings kommt jetzt einfach kein Dialog xd Habe es dir mal per PN geschickt, weiß nicht woran es liegt
Schildere bitte das Problem mit dem zugehörigen Code hier im Forum.
Die Gründe warum ich auf die Scripting Base verweise
Vielen Dank.
Nimm den root Benutzer ohne Passwort:
#define MYSQL_HOST "127.0.0.1"
#define MYSQL_PASS ""
#define MYSQL_USER "root"
#define MYSQL_DBSE "samp" //so wie deine DB eben heißt
Das ist in 99% aller Fälle standardmäßig so eingestellt.
Dein User wird nicht die richtigen Berechtigungen haben, das ist auf localhost (dein Rechner/Server) so eingestellt, standardmäßig zumindest.
Deshalb benutze, wie ich oben geschrieben habe, den root-User ohne Passwort, der hat ALLE Berechtigungen. Dem kannst du später auch, je nach Client, ein Passwort geben.