27.05.2012, 19:46
Hi, i've got a problem with SetTimerEx. Firstly, no it's not about repeating it all the time. I want it to re-start after i've used it.
Ok it's hard to understand like that, so here:
So there's the problem. First time I do /getup command after the timer (c_down) it works fine. It does what it's scripted to do, no problem. But after I get HP under 20 again, the timer won't repeat then.. I can use /getup command without any timer limit.. So why it won't work after the first time? I've tried everything, nothing helps... Hope i'll get some quick answer, this is stealing my attention seriously. x(
Ok it's hard to understand like that, so here:
pawn Код:
#include a_samp
enum crack2
{
bool: is_cracked,
timer,
c_down,
bool:c_isover,
Float:health
};
new crack[MAX_PLAYERS][crack2];
forward Crack_Timer(playerid);
forward Count_Down(playerid);
public OnPlayerSpawn(playerid)
{
crack[playerid][is_cracked] = false;
crack[playerid][c_isover] = false;
crack[playerid][timer] = SetTimerEx("Crack_Timer",1500,true,"i",playerid);
return 1;
}
public Crack_Timer(playerid)
{
GetPlayerHealth(playerid,crack[playerid][health]);
if( (crack[playerid][health] <= 20) && (crack[playerid][is_cracked] == false) )
{
crack[playerid][is_cracked] = true;
TogglePlayerControllable(playerid,false);
ApplyAnimation(playerid,"PED","KO_spin_L",2.8,0,1,1,1,0);
crack[playerid][c_down] = SetTimerEx("Count_Down", 5 * 60 * 250, false, "i", playerid);
}
return 1;
}
public Count_Down(playerid)
{
if(crack[playerid][is_cracked] == true) {
crack[playerid][c_isover] = true;
KillTimer(crack[playerid][timer]);
}
return 1;
}
PlayerToPlayer(playerid,toplayerid)
{
new Float:pos[2][3];
GetPlayerPos(playerid,pos[0][0],pos[0][1],pos[0][2]);
GetPlayerPos(toplayerid,pos[1][0],pos[1][1],pos[1][2]);
pos[0][0] -= pos[1][0];
pos[0][1] -= pos[1][1];
pos[0][2] -= pos[1][2];
return floatround( floatsqroot( (floatpower(pos[0][0],2) + floatpower(pos[0][1],2) + floatpower(pos[0][2],2) ) ), floatround_round);
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext,"/getup",true))
{
if( (crack[playerid][is_cracked] == true) && (crack[playerid][c_isover] == true))
{
SendClientMessage(playerid, -1, "You got up!");
crack[playerid][is_cracked] = false;
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_NONE);
TogglePlayerControllable(playerid,true);
SetPlayerHealth(playerid, 25);
SetTimerEx("Crack_Timer",2000,true,"i",playerid);
}
return 1;
}
if(!strcmp(cmdtext,"/helpup",true,9))
{
if(!cmdtext[8]) SendClientMessage(playerid,-1,"USAGE: /helpup [ID]");
else if (PlayerToPlayer(playerid,cmdtext[9]) >= 5) SendClientMessage(playerid,-1,"Player too far!");
else if( (crack[cmdtext[9]][is_cracked] == true) && (cmdtext[9] != playerid))
{
ApplyAnimation(playerid,"BOMBER","BOM_Plant",2.6,1,1,1,0,6800);
crack[cmdtext[9]][is_cracked] = false;
crack[cmdtext[9]][c_isover] = false;
KillTimer(crack[cmdtext[9]][timer]);
KillTimer(crack[cmdtext[9]][c_down]);
SetPlayerSpecialAction(cmdtext[9],SPECIAL_ACTION_NONE);
}
return 1;
}
return 0;
}