Du brauchst keinen endlosen Timer, der permanent durch alle Spieler loopt.
Mach einfach einen direkten, sobald der Spieler die Bank ausraubt, schau:
(Also lösche deinen SetTimer und deinen public)
//Sowas lagert man immer besser aus:
stock CopsOnline(anzahl)
{
new c;
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsPlayerConnected(i) && Fraktion[Spieler[i][Frak]][Polizei] == 1) c++;
}
return c >= anzahl;
}
ocmd:bankrob(playerid, params[])
{
new cops, string[128];
if(Spieler[playerid][Level] < 3)return SendClientMessage(playerid, COLOR_GRAD1, "Das kannst du erst ab Level 3!");
if(!IsPlayerInRangeOfPoint(playerid, 6.0, 1424.3530,-1004.1053,1639.7909))return SendClientMessage(playerid, COLOR_GRAD1, "Du befindest dich nicht am Banktresor.");
if(Fraktion[Spieler[playerid][Frak]][Staat] == 1)return SendClientMessage(playerid, COLOR_GRAD1, "Du kannst als Beamter keine Bank ausrauben.");
if(gettime() < BankRobTime)return SendClientMessage(playerid, COLOR_GRAD1, "Die Bank wurde vor kurzem ausgeraubt, komm später wieder!");
if(!CopsOnline(2))return SendClientMessage(playerid, COLOR_GRAD1, "Es müssen mindestens 2 Beamte online sein!");
BankRobTime = gettime()+(120*120); // Erst in 2 Stunden wieder
GiveWanted("Niemand", playerid, "Bankraub", MAX_WANTEDBANKRAUB);
SendClientMessage(playerid, COLOR_RED, "Du hast ein Verbrechen begangen. (Bankraub) Reporter: Unbekannt");
format(string, sizeof(string), "HQ: %s (ID: %d) hat ein Verbrechen begangen: Bankraub, over.", Spieler[playerid][Name], playerid);
SendHQMessage(COLOR_DARKBLUE, string);
format(string, sizeof(string), "HQ: Reporter: Unbekannt, Aktuelles Wantedlevel: %d, over.", Spieler[playerid][Wanted]);
SendHQMessage(COLOR_DARKBLUE, string);
pIsRobbingBank[playerid] = 1;
pRobbingTimer[playerid] = 240;
format(string, sizeof(string), "%s raubt die Bank in Los Santos aus!", Spieler[playerid][Name]);
SendClientMessageToAll(COLOR_LIGHTBLUE, string);
SetTimerEx("OnPlayerBankRob",997,0,"i",playerid);
return 1;
}
public OnPlayerBankRob(playerid)
{
if(!pIsRobbingBank[playerid]) return 0;
new string[128];
if(!IsPlayerInRangeOfPoint(playerid, 30.0, 1424.3530,-1004.1053,1639.7909)) //<< Die Koordinaten sind jetzt die vom Tresorraum, evtl anpassen
{
pIsRobbingBank[playerid] = pRobbingTimer[playerid] = 0;
format(string, sizeof(string), "Bankräuber %s hat die Bank vorzeitig verlassen!", Spieler[playerid][Name]);
SendClientMessageToAll(COLOR_LIGHTBLUE, string);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Der Bank-Raub wurde abgebrochen.");
return 1;
}
pRobbingTimer[playerid] --;
switch(pRobbingTimer[playerid])
{
case 180: SendClientMessage(playerid, COLOR_LIGHTBLUE, "Noch 3 Minuten bis die Bank erfolgreich ausgeraubt wurde!");
case 120: SendClientMessage(playerid, COLOR_LIGHTBLUE, "Noch 2 Minuten bis die Bank erfolgreich ausgeraubt wurde!");
case 60: SendClientMessage(playerid, COLOR_LIGHTBLUE, "Noch 1 Minute bis die Bank erfolgreich ausgeraubt wurde!");
case 0: {
new preis = randomex(20000, 80000);
format(string, sizeof(string), "%s hat erfolgreich die Bank ausgeraubt. ($%d)", Spieler[playerid][Name], preis);
SendClientMessageToAll(COLOR_LIGHTBLUE, string);
GivePlayerMoney(playerid, preis);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nun sieh zu, dass du hier abhaust!");
pIsRobbingBank[playerid] = pRobbingTimer[playerid] = 0;
Server[Staatskasse] -= preis;
}
}
SetTimerEx("OnPlayerBankRob",997,0,"i",playerid);
return 1;
}
Alles anzeigen