Taste für 5 sekunden festhalten
- reaL.
- Geschlossen
- Erledigt
-
-
http://wiki.sa-mp.com/wiki/OnP…ting_first_pressing_a_key
Wenn die Taste gedrückt wird speicherst du gettime in einer Spielervariable, wenn sie los gelassen wird, machst du gettime minus die Spielervariable, wenn das größer gleich 5 ist, sind 5 Sekunden vorbei.
-
Mach es so:
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))#define RELEASED(%0) \
(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))new h_job[MAX_PLAYERS]; //oben im Skript
//Unter OnPlayerkeyStateChange
if(PRESSED(KEY_ANALOG_DOWN)) if(!h_job[playerid]) h_job[playerid] = gettime();
if(RELEASED(KEY_ANALOG_DOWN)) {
if((gettime()-h_job[playerid]) >= 5) {
//Hier dann der Code rein, wenn er 5 Sekunden lang die Taste gedrückt hat :)
}
h_job[playerid]=0;
} -
Beitrag von reaL. ()
Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar. -
Korrekt.
Nur achte darauf, nicht zwei mal PRESSED zu definieren.
-
es passiert aber nichts
Oben im Script
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))#define RELEASED(%0) \
(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))new h_job[MAX_PLAYERS];
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(PRESSED(KEY_ANALOG_DOWN)) if(!h_job[playerid]) h_job[playerid] = gettime();
if(RELEASED(KEY_ANALOG_DOWN))
{
if((gettime()-h_job[playerid]) >= 5)
{
SendClientMessage(playerid,ROT,"Länger als 5 sec :DD");
}
else
{
SendClientMessage(playerid,ROT,"Keine 5 sec ://");
}
h_job[playerid]=0;
}
return 1;
} -
Hast du es mal einer anderen Taste versucht, zum Beispiel KEY_YES (Z)?
Nicht alle Tasten werden da richtig erkannt, ich hatte damit schon Probleme. -
es passiert aber nichts
Bist du in einem Auto...oder zu Fuß?!Dann Probier mal die Tasten: KEY_LOOK_BEHIND oder KEY_SUBMISSION
-
Beitrag von reaL. ()
Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar. -
Ich habe mal ne frage kann man vom Script aus die Schaufel vom Dozer hoch oder Runter machen ?
-
Nein kann man nicht
-
wieso funktioniert das nicht ?
Jeffrey:
Kaliber:
ich will das man die taste num8 nur in dem Bereich drücken muss und das 7sec aber es ist so wenn ich irgendwas drücke w oder so kommt der Text du hast die Taste keine 7 sekunden gedrücktif(IsPlayerInRangeOfPoint(playerid,20,682.4080,823.6100,-27.3594)) if(PRESSED(2048)) if(!Bergarbeiter[playerid][aufladez]) Bergarbeiter[playerid][aufladez] = gettime();
if(RELEASED(2048))
print("Losgelassen!");
{
if((gettime()-Bergarbeiter[playerid][aufladez]) == 7)
{
SetPlayerCheckpoint(playerid,Bergabfuhr_Stationen[berg_Checkpoint][B_fX],Bergabfuhr_Stationen[berg_Checkpoint][B_fY],Bergabfuhr_Stationen[berg_Checkpoint][B_fZ],Bergabfuhr_Stationen[berg_Checkpoint][B_fRad]);
SendClientMessage(playerid,GRÜN,"Eisenerz abgeliefert!");
}
else
{
SendClientMessage(playerid,ROT,"Du hast die Taste keine 7 Sekunden gedrückt");
}
Bergarbeiter[playerid][aufladez]=0;
} -
Beitrag von Fernando_Jizuya ()
Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar. -
Beitrag von Fernando_Jizuya ()
Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar. -
print("Losgelassen!");
Der Print muss eine Zeile weiter runter. Sonst kommt nur der Print wenn du es los lässt, und der Rest kommt immer. -
fail habe das icht gesehen
ne frage wie mach ich das wenn die 7sec vorbei sind direkt die nachricht kommt ?
sprich ich drück die Taste und wenn die 7sec vorbei sind kommt die Nachricht und Der Cp wird gesetzt weil man sonst bis 7 sekunden zählen musspublic OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(IsPlayerInRangeOfPoint(playerid,20,682.4080,823.6100,-27.3594))
{
if(PRESSED(2048))
{
if(!Bergarbeiter[playerid][aufladez])
Bergarbeiter[playerid][aufladez] = gettime();
}
}
if(RELEASED(2048))
{
if((gettime()-Bergarbeiter[playerid][aufladez]) == 7)
{
SetPlayerCheckpoint(playerid,Bergabfuhr_Stationen[berg_Checkpoint][B_fX],Bergabfuhr_Stationen[berg_Checkpoint][B_fY],Bergabfuhr_Stationen[berg_Checkpoint][B_fZ],Bergabfuhr_Stationen[berg_Checkpoint][B_fRad]);
SendClientMessage(playerid,GRÜN,"Eisenerz abgeliefert!");
}
else
{
SendClientMessage(playerid,ROT,"Du hast die Taste keine 7 Sekunden gedrückt");
}
Bergarbeiter[playerid][aufladez]=0;
}
return 1;
} -
Mit einem Timer, der jede Sekunde durch alle Spieler loopt (Schleife) und das hier prüft:
if((gettime()-Bergarbeiter[playerid][aufladez]) == 7) -
mit Gettime kann ich das nicht machen ?
-
Was meinst du? gettime verwendest du ja dann im Timer.
Du brauchst ja etwas, was ständig prüft ob die 7 Sekunden rum sind, das ist der Timer. -
Beitrag von reaL. ()
Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar. -