Help with if pressed and if released -
ignas1125 - 18.03.2014
Hi i need make a timer when i holding the key the timer are true when i released the timer are false
my code:
Код:
if(HOLDING(KEY_SPRINT))
{
SetTimer("GTSpeed", 1000, true);
return 1;
}
if (RELEASED(KEY_SPRINT))
{
SetTimer("GTSpeed", 100000000, false);
}
gtspeed public:
Код:
public GTSpeed(playerid)
{
new Float:sXxx,Float:sYxx,Float:SZxx;
GetVehicleVelocity( GetPlayerVehicleID( playerid ),sXxx,sYxx,SZxx);
SetVehicleVelocity( GetPlayerVehicleID( playerid ),sXxx*1.1,sYxx*1.1,SZxx*1.1);
return 1;
}
when i my timer starts it wont stop, my car going until 100000km/h speed

i want to make when i'm holding key_sprint then my car every 1 second speed up :/ but i don't know how to make that, if anyone can help my i be really thankful.
Re: Help with if pressed and if released -
Sascha - 18.03.2014
don't use "HOLDING" use "PRESS" instead... so the moment that you press the button for the first time, ane the repeating timer.. 'cause in your case it starts quite a lot timers that are repeating...
so like this:
pawn Код:
new acc_time[MAX_PLAYERS];
forward GTSpeed(playerid);
public GTSpeed(playerid)
{
new Float:sXxx,Float:sYxx,Float:SZxx;
GetVehicleVelocity( GetPlayerVehicleID( playerid ),sXxx,sYxx,SZxx);
SetVehicleVelocity( GetPlayerVehicleID( playerid ),sXxx*1.1,sYxx*1.1,SZxx*1.1);
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys & KEY_SPRINT) && !(oldkeys & KEY_SPRINT))
{
acc_time = SetTimerEx("GTSpeed", 1000, true, "i", playerid);
return 1;
}
if (!(newkeys & KEY_SPRINT) && (oldkeys & KEY_SPRINT))
{
KillTimer(acc_time[playerid]);
return 1;
}
return 1;
}
*Note: not tested, neither in compiler nor in-game, so there could be typos, etc.
AW: Help with if pressed and if released -
Nero_3D - 18.03.2014
Now you only need to add some security checks and done
pawn Код:
// global
new
gSpeedTimer[MAX_PLAYERS] = {-1, ...}
;
// OnPlayerKeyStateChange
if(PRESSED(KEY_SPRINT)) {
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
gSpeedTimer[playerid] = SetTimerEx("GTSpeed", 1000, true, "i", GetPlayerVehicleID(playerid));
}
}
if(RELEASED(KEY_SPRINT)) {
if(gSpeedTimer[playerid] != -1) {
KillTimer(gSpeedTimer[playerid]);
gSpeedTimer[playerid] = -1;
}
}
// OnPlayerStateChange
if(oldstate == PLAYER_STATE_DRIVER) {
if(gSpeedTimer[playerid] != -1) {
KillTimer(gSpeedTimer[playerid]);
gSpeedTimer[playerid] = -1;
}
}
//
forward GTSpeed(vehicleid);
public GTSpeed(vehicleid) {
const
Float: multiplier = 1.1
;
new
Float: X,
Float: Y,
Float: Z
;
GetVehicleVelocity(vehicleid, X, Y, Z);
SetVehicleVelocity(vehicleid, X * multiplier, Y * multiplier, Z * multiplier);
}
Re: Help with if pressed and if released -
ignas1125 - 18.03.2014
Thanks guys, works!!! :O