Also erstmal: Du erstellst einen Timer innerhalb einer schleife. Das heisst bei dem Befehl /coutndown und den anderen publics werden 500 Timer (!) erstellt. Das solltest du auf keinen fall tun. Zudem solltest du eine IsPlayerConnected abfrage mit in die schleife bringen. Und eine Globale variable anzulegen halte ich auch für überflüssig.
Versuch es mal so:
forward Countdown(playerid);
forward Countdown2(playerid);
forward Countdown3(playerid);
forward Countdown4(playerid);
if(strcmp("/Countdown",cmdtext,true)==0||strcmp("/CD",cmdtext,true)==0)
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
{
SendClientMessage(i,Gelb,"Countdown wurde auf 3 Sekunden gestellt!");
TogglePlayerControllable(i,0);
}
}
SetTimer("Countdown",1000,false);
return 1;
}
public Countdown(playerid)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
{
SendClientMessage(CountDown,Gelb,"3!");
}
}
SetTimer("Countdown2",1000,false);
}
public Countdown2(playerid)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
{
SendClientMessage(CountDown,Gelb,"2!");
}
}
SetTimer("Countdown3",1000,false);
}
public Countdown3(playerid)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
{
SendClientMessage(CountDown,Gelb,"1!");
}
}
SetTimer("Countdown4",1000,false);
}
public Countdown4(playerid)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
{
SendClientMessage(i,Gelb,"GO GO GO GO GO GO GO GO GO");
TogglePlayerControllable(i,1);
}
}
}