aber was genau bringt es wenn der gm für die zeit pausiert wird?
Oder verstehe ich das falsch?
[ MAKRO ] Sleep Funktion
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
aber was genau bringt es wenn der gm für die zeit pausiert wird?
Wo wird denn der GM pausiert?Gar nicht, das wurde aber auch schon ein paar mal gesagt
-
Kaliber meinte das der code pausiert wird, da dacht ich der gm.
-
Ja der Code wird auch pausiert, allerdings durch einen Timer,
wie es eigentlich auch aus meiner Erklärung im Thread hervorgehen sollte -
Kaliber ist wieder mit seiner Langeweile da. Schönes Ding. Schaut gut aus. Werds mal durchtesten.
Alles klar, dankeKaliber 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 einfachermfg.
-
Jo hab ich einigermaßen, ich bleib aber bei den normalen timern das verwirrt mich nicht so
-
Jo hab ich einigermaßen, ich bleib aber bei den normalen timern das verwirrt mich nicht so
Okay -
Kaliber:
Ich bekomme leider ein paar Fehler *sad*#define sleep(%0)<%1>; SetTimer("@sleep_"#%1#,%0,0); return 1;}\
@sleep_%1();@sleep_%1() {forward TutorialTimer(playerid,npcid);
public TutorialTimer(playerid,npcid)
{
new string[128];
if(TutTime[playerid] <= 1)
{
if(TutTime[playerid] == 1)
{
TutTime[playerid] = 2;
ApplyAnimation(Medic,"MEDIC","CPR",4.1,0,1,1,1,1);
SendClientMessage(playerid,COLOR_GREEN,"bla");
sleep(1000)<a>;
SendClientMessage(playerid,COLOR_GREEN,"bla");
sleep(1000)<b>;
SendClientMessage(playerid,COLOR_GREEN,"bla");
}
}
return 1;
}
C:\Users\asdasd\Desktop\gamemodes\script.pwn(325) : error 017: undefined symbol "@sleep_a"
C:\Users\asdasd\Desktop\gamemodes\script.pwn(325) : error 017: undefined symbol "@sleep_a"
C:\Users\asdasd\Desktop\script.pwn(327) : warning 225: unreachable code
C:\Users\asdasd\Desktop\gamemodes\script.pwn(327) : error 017: undefined symbol "@sleep_b"
C:\Users\asdasd\Desktop\gamemodes\script.pwn(327) : error 017: undefined symbol "@sleep_b"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase4 Errors.
-
Finde ich sehr geil, wird mir sicherlich bei ein paar Dingen die Arbeit erleichtern.
-
Ich bekomme leider ein paar Fehler *sad*
Weil du meinen Text nicht richtig gelesen hastDas funktioniert leider nur so:
forward TutorialTimer(playerid,npcid);
public TutorialTimer(playerid,npcid)
{
new string[128];
if(TutTime[playerid] > 1) return 1;
TutTime[playerid] = 2;
ApplyAnimation(Medic,"MEDIC","CPR",4.1,0,1,1,1,1);
SendClientMessage(playerid,COLOR_GREEN,"bla");
pSleep(1000)<a,"i",playerid>; //pSleep da du playerid für die SendClientMessage brauchst
SendClientMessage(playerid,COLOR_GREEN,"bla");
pSleep(1000)<b,"i",playerid>; //pSleep da du playerid für die SendClientMessage brauchst
SendClientMessage(playerid,COLOR_GREEN,"bla");
return 1;
}mfg.
-
Danke für die Hife
Besser macht es das trotzdem nicht :d
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(601) : error 002: only a single statement (or expression) can follow each "case"
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(601) : warning 215: expression has no effect
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(601) : error 017: undefined symbol "@sleep_a"
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(612) : warning 225: unreachable code
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(612) : warning 217: loose indentation
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(612) : error 014: invalid statement; not in switch
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(612) : warning 215: expression has no effect
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(612) : error 001: expected token: ";", but found ":"
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(612) : error 029: invalid expression, assumed zero
C:\Users\asdasd\Desktop\SAMP Kunden\DevdogVideos\gamemodes\script.pwn(612) : fatal error 107: too many error messages on one lineCompilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
6 Errors.
TutTime[playerid] = 2;
SendClientMessage(playerid,COLOR_GREEN,"Pieter: ");
pSleep(1000)<a, "dd", playerid, npcid>;
SendClientMessage(playerid,COLOR_GREEN,"Pieter: ");
//sleep(1000)<b>;
format(string,sizeof(string),"%s: Mhhmm",SpielerName(playerid));
SendClientMessage(playerid,COLOR_GREEN,string);
//sleep(1000)<c>;
SendClientMessage(playerid,COLOR_GREEN,"Pieter: ");
//sleep(1000)<d>;
TutTimer[playerid][1] = SetTimerEx("TutorialTimer",6 * 1000,false,"ii",playerid,npcid);
return 1;
}
case 2:
{
KillTimer(TutTimer[playerid][1]);
TutTime[playerid] = 3;
FCNPC_EnterVehicle(Medic,MedicCar,0,1);
FCNPC_SetSpecialAction(Medic,SPECIAL_ACTION_NONE);
PlayerPlaySound(playerid,1022,0.0,0.0,0.0);
print("#debug 2");
//sleep(1000)<f>;
TutTimer[playerid][2] = SetTimerEx("TutorialTimer",10 * 1000,false,"ii",playerid,npcid);
return 1;
} -
Besser macht es das trotzdem nicht :d
Weil du den Text immer noch nicht gelesen hast -.-Schau mal, der Code ist nur nutzbar, solange er auf der 1. Lokalen Ebene ist!
public / stock Test()
{
//Hier nur möglich!!
if() { /*Hier nicht möglich!! 2. Lokale Ebene */ }
switch() case: /*Hier nicht möglich!! 3. Lokale Ebene */
}mfg.
-
Neiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiin
Naja trotzdem Danke -
Neiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiin
Du musst halt versuchen, das alles auf der 1. Ebene zu regeln, dass sollte eigentlich auch relativ gut möglich sein...musst halt ein paar Dinge anpassen und mit den Pausen spielenmfg.
-
Kaliber:
public TutorialTimer(playerid,npcid)
{
SendClientMessage(playerid,COLOR_GREEN,"Pieter: Hey was ist denn mit dir los?");
pSleep(1000)<a, "dd", playerid, npcid>;
SendClientMessage(playerid,COLOR_GREEN,"Pieter: Hallo??! Kannst du mich hören?");
pSleep(1000)<b, "dd", playerid, npcid>;
new string[128];
format(string,sizeof(string),"%s: Mhhmm",SpielerName(playerid));
SendClientMessage(playerid,COLOR_GREEN,string);
pSleep(1000)<c, "dd", playerid, npcid>;
SendClientMessage(playerid,COLOR_GREEN,"Pieter: Ich bringe dich wohl besser ins Krankenhaus");
pSleep(1000)<d, "dd", playerid, npcid>;
pSleep(6000)<ca, "dd", playerid, npcid>;
FCNPC_EnterVehicle(Medic,MedicCar,0,1);
FCNPC_SetSpecialAction(Medic,SPECIAL_ACTION_NONE);
PlayerPlaySound(playerid,1022,0.0,0.0,0.0);
pSleep(10000)<cb, "dd", playerid, npcid>; -
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> uswZu 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 freuenmfg.
//Edited: pSleep
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> uswZu 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 freuenmfg.
//Edited: pSleep
Ich verstehe diese <a> nicht? Muss das benutzt werden kannst mir das mal erklären mit i also Spieler und a? -
Das A ist der TimerName(?), das i der Parameter.
-
Und so geht das immer weiter.
Benutzt du zufällig öfter Sleep, wo du auch a eingegeben hast?BZW hast du was an den Makros verändert oder rufst du die Funktion bei dir öfters auf?
Ich verstehe diese <a> nicht? Muss das benutzt werden kannst mir das mal erklären mit i also Spieler und a?
Les dir den Text doch nochmal genau durch, habe doch eine genaue Erklärung dafür...bzw schau dir das Makro anmfg.
-
-
Also d.h es ist wis ein timer?
Wie in dem Thread schon mehrmals erklärt wurde..so ist esmfg.