Kaliber:
Vllt hat der samp benutzer ja kein pw
Muss er aber, da sonst kein Query an die Datenbank gesendet wird, wie du der Fehlermeldung entnehmen kannst:
[ERROR] mysql_connect - empty connection data specified
mfg. ![]()
Kaliber:
Vllt hat der samp benutzer ja kein pw
Muss er aber, da sonst kein Query an die Datenbank gesendet wird, wie du der Fehlermeldung entnehmen kannst:
[ERROR] mysql_connect - empty connection data specified
mfg. ![]()
#define sql_pass ""
1. Ich hoffe du hast das nicht in deinem Script in 1ner Reihe ![]()
2. sql_pass darf nicht leer sein
Da muss ein Passwort rein, deshalb der Fehler ![]()
mfg. ![]()
So söllte eigendlich alles sien was du brauchst, jenachdem was du noch brauchst sag bescheid
So stimmt das aber nicht ganz ![]()
Der Code sollte so aussehen:
new ipstring[MAX_PLAYERS][16];//oben
//Unter OnPlayerConnect
GetPlayerIp(playerid, ipstring[playerid], 16);
//Und jetzt kannst du überall im Script das hier nutzen:
format(string,64,"Seine Ip ist: %s",ipstring[playerid]);
mfg. ![]()
Da hatte jemand Langeweile...*hust* *hust* ![]()
Hab mir SpielerName(playerid) als makro gemacht.
Und jetzt kommen ingame komische Wörter raus.
GetPlayerName returnt ja auch nicht den Namen des Spielers, sondern die Länge von dem Namen ![]()
Als Makro kannst du das nicht machen, machs doch einfach so:
new SpielerName[MAX_PLAYERS][MAX_PLAYER_NAME];
//Unter OnPLayerConnect
GetPlayerName(playerid,SpielerName[playerid],MAX_PLAYER_NAME);
//Und nutzen dann einfach so
format(string,128,"Der Name ist: %s",SpielerName[playerid]);
mfg. ![]()
Jo hab ich einigermaßen, ich bleib aber bei den normalen timern das verwirrt mich nicht so
Okay ![]()
Kaliber ist wieder mit seiner Langeweile da. Schönes Ding. Schaut gut aus. Werds mal durchtesten.
Alles klar, danke ![]()
Kaliber meinte das der code pausiert wird, da dacht ich der gm.
Ich hoffe, du hast es jetzt so ungefähr verstanden
Das ist nichts anderes als ein Timer ... nur übersichtlicher und einfacher ![]()
mfg. ![]()
Mal ne doofe Frage, was bringt das jetzt eig?
Naja, so ist es z.B. einfacher und übersichtlicher ein Tutorial Mode zu erstellen oder bestimmte Nachrichten halt erst ab ner Bestimmten Zeit zu senden allgemein...
Naja, macht halt das, was die sleep Funktion bewirken soll, den Code kurz pausieren und ab einer bestimmten Zeit weiterfortführen ![]()
mfg. ![]()
Zudem solltest du an dein Code Ende ein return 1; schreiben, sonst bekommst du eine Meldung InGame namens "Unknown Command" ![]()
mfg. ![]()
Was dazu auch mal interessant wäre ist goto zu studieren und vllt ein opcode via emit zu generieren um zu dem pointer zu gelangen.
Hatte auch an diese beiden Möglichkeiten gedacht ![]()
Jedoch, ist das mit goto nicht möglich, da es ja einfach an einen Punkt springt, sprich:
stop:
print("test");
goto stop;
//Was leider nicht geht ist folgendes:
stop:
print("test");
SetTimer("test",1000,0);
public test() {
goto stop;
}
Da kann man keinen Sleep machen, außer man lässt das so lange irgendwie springen bis eine bestimmte anzahl von ms vorbei ist, aber dann hängt der Server weil die CPU Auslastung bei 100% liegt ![]()
Mit emit, ist das leider nicht möglich direkt wieder an einen bestimmten Punkt im Code zu springen...Das funktioniert nur in strings ![]()
mfg. ![]()
Ich habe nochmal eine Funktion hinzugefügt, damit man auch die Parameter von der Ursprungs Funktion nutzen kann ![]()
mfg. ![]()
Einmal nur kurz am Rande, wie kann ich denn ein Wort vom Textdraw farbig machen?
Habe es schon mit einem HTML Code versucht, so wie es auch bei Messages klappt, geht aber nicht.
Ne nicht mit HTML sondern einfach so:
mfg. ![]()
Wie sieht es denn aus, wenn ich das ganze in einer Schleife mache? Dann wird der Timer ja auch immer wieder gesetzt...
Das ist nicht für Schleifen ausgelegt...nur für Localen Code der 1. Ebene ![]()
Genauso if-Bedingungen oder ähnliches ist hier nicht möglich...man muss dafür dann halt eine neue Instanz aufrufen.
mfg. ![]()
Guten Mittag euch allen,
ich habe mich mal ein bisschen umgeschaut und gesehen, dass einige Personen nach einer sleep Funktion in Pawn suchen.
Doch wie sie festgestellt haben gibt es sowas wie in Java (Thread.sleep(1000);) nicht...
Also habe ich mal so eine Funktion geschrieben:
1. Beispiele:
Also, so funktioniert die Funktion:
public OnGameModeInit() //Mal als Beispiel genommen
{
print("test"); //Wird normal ohne Verzögerung aufgerufen
sleep(1000)<a>; //Hier findet ein Timeout von 1000ms statt
print("test2"); //Dann wird das geprintet
sleep(1000)<b>; //Wieder Timeout von 1000ms
print("test3"); //und dann wird geprintet
return 1;
}
//Oder wenn man Parameter noch übergeben will
public OnPlayerConnect(playerid) //Mal als Beispiel
{
SendClientMessage(playerid,-1,"hi");
pSleep(1000)<a,"i",playerid>; //Unten ist eine nähere Erklärung
SendClientMessage(playerid,-1,"hallo nach 1000ms!");
}
2. Nähere Funktions Erklärung
Also, das sleep(1000)...sollte jedem klar sein
sleep so heißt halt die Funktion und 1000 ist das Attribut für die Millisekunden von dem Timeout ![]()
Was ich dann noch gemacht habe, z.B. dieses <a> steht für den Namen des Callbacks der Aufgerufen wird, sobald der Timeout zuende ist!
Wichtig: Das darf nicht doppelt vorkommen, man kann in einem Script nicht 2x <a> machen oder 2x <b>, diese Reihe weiter fortführen!! Egal wie! Nichts doppelt machen!
Einfach so: <a>, dann <b>, dann <c>,...usw und wenn man dann 26 Buchstaben durch hat, dann <aa>, <bb> usw ![]()
Zu pSleep, ist zu sagen, dass mit dem "i" ist halt wie bei SetTimerEx und steht für den Typ der Variable (i = Integer) und danach kommen halt die ganzen Variablen.
//Wenn man mehr Variablen übergeben will, macht man einfach:
pSleep(1000)<a,"ii",playerid,x);
3. Source Code:
Der Source Code beschränkt sich nur auf ein kleines Makro, was ihr oben im Script einfügen könnt und sieht folgender maßen aus:
//(c) by Kaliber
#define sleep(%0)<%1>; SetTimer("@sleep_"#%1#,%0,0); return 1;}\
@sleep_%1();@sleep_%1() {
#define pSleep(%0)<%1,%2,%3>; SetTimerEx("@sleep_"#%1#,%0,0,%2,%3); return 1;}\
@sleep_%1(%3);@sleep_%1(%3) {
4. Schlusswort
Ich würde mich über ein kleines Feedback freuen ![]()
mfg.
//Edited: pSleep
Es ist vil nicht platz sparend aber wenn ich eine schleife mit vielen objecten habe wird das nicht viel resosen verbauchen oder wie das heißt ?
oder wird beides gleich viel verbrauchen ?
was währe am besten ?
Es heißt Ressourcen ![]()
und es ist sparender wenn du nur 1ne Variable machst, anstatt 5 oder so ![]()
Was irgendwie ja auch logisch ist...dann wird nämlich nur 1ne Variable im Speicher angelegt und nicht 5...
Wieso ist eine Schleife nicht passend?
Ist sie ![]()
Wieso wird dafür mehr Zeit verbraucht?
Nun, es wird mehr Zeit verbrauchst...aber wir reden hier von 0.01ms oder so
Und das nur 1x nämlich wenn der Callback OnGameModeInit aufgerufen wird...
Abgesehen davon, dass es 0.001ms länger dauert, hat man Zeilen gespart, es ist eine schönere Übersicht und man kann Problemlos auch noch 99 weitere Texturen dran hängen ![]()
//Edit:
Was H4rd_B4se am Ende seines Beitrags geschrieben hat, ist auch eine sehr elegante Lösung! ![]()
mfg. ![]()
Auch zwischen PHP und C ist nicht wirklich viel Unterschied.
Ehm...doch ![]()
Einfach so:
Create3DTextLabel("{FF4000}[ Kaufmenü ]\n{FFFFFF}Benutze '/kaufen'",weis,-28.2701,-89.9557,1003.5469,20,1);
mfg. ![]()
Tut mir leid, bin noch zu sehr an Java gewöhnt, aber im Prinzip gibt beides das selbe aus.
Nein nicht direkt ![]()
double gibt z.B. in Java auch Kommazahlen aus, sprich 1.23 ![]()
Aber %d gibt eben nur ganze Integer aus ... und mit %f muss man Floats ausgeben ![]()
mfg. ![]()
Erstmal ist der Name nicht vom Datentyp double, sondern String, weshalb du auch mit diesem arbeiten musst.
%d steht nicht für double sondern für dezimal.
und bei deinem Beispiel ist die Variable string überflüssig...da kann man direkt name verwenden ![]()
mfg. ![]()