Das liegt daran, dass der Timer X mal gestartet wird, wenn du weniger als 6 Healthpunkte hast, jedes mal wenn OnPlayerUpdate aufgerufen wird wird der Timer nochmal gestartet (nicht von vorne, sondern parallel so den bereits existierenden).
Empfehlenswert wäre es so zu machen:
new Float:bhealth;
GetPlayerHealth(playerid, bhealth);
if(Verletzttimer[playerid] != -1 && bhealth > 6.0)
{
TextDrawHideForPlayer(playerid,VERLETZT);
TextDrawShowForPlayer(playerid,Ts3);
TextDrawShowForPlayer(playerid,TsIp);
KillTimer(Verletzttimer[playerid]);
Verletzttimer[playerid] = -1;
}
else if(Verletzttimer[playerid] == -1 && bhealth <= 6.0)
{
LoopingAnim(playerid, "SWEET", "Sweet_injuredloop", 2.5, 1, 0, 0, 0, 0); // Dieing of Crac
RemovePlayerFromVehicle(playerid);
TextDrawShowForPlayer(playerid,VERLETZT);
TextDrawHideForPlayer(playerid,Ts3);
Verletzttimer[playerid] = SetTimerEx("verletztsein",60000,0,"i",playerid);
TextDrawHideForPlayer(playerid,TsIp);
}
Und bei der Deklaration:
new Verletzttimer[MAX_PLAYERS] = {-1,...}; //Setzt alle Indizes auf -1
Nach der Methode von iEnerqie würde es zwar auf den ersten Blick auch klappen, allerdings wird die Variable vom Timer nicht zurückgesetzt, und da bei > 6.0 die Prüfung fehlt, ob der Timer läuft, wird der Timer mit der ID X ständig beendet. Bekommt ein anderer Timer diese ID zugewiesen, dann wird dieser Timer sofort beendet (ist wie bei den playerids, wenn du ständig versuchst, ID 10 zu kicken, irgendwann bekommt wieder einer die ID 10 und wird sofort gekickt).
Zu deiner Frage:
Das _ könnte hier bestehen bleiben, da die pVar nichts mit dem Array zu tun hat. Eine pVar und ein Array gleichzeitig zu nutzen macht aber keinen Sinn, da man es allein über das Array regeln kann (siehe Code).