Zu deinem ersten Problem, du musst den Code aus der Schleife holen:
public Pfandadd()
{
new str[3], count, query[128];
for(new i=1;i<MAX_TONNEN;i++)
{
format(str, 3, "%i", i);
if(mysql_GetFloat("nlr_tonne", "X", "id", str) < 1.0)continue;
count ++;
}
new rand = 1 + random(count);
format(query, sizeof(query), "SELECT * nlr_tonne WHERE id=%i", rand);
mysql_query(query);
mysql_store_result();
if(!mysql_num_rows())
{
KillTimer(Tonnentimer);
Tonnentimer = SetTimer("Pfandadd", 1000, false);
printf("Es konnten keine Pfandflaschen an ID: %i übermittelt werden!",rand);
}
else
{
KillTimer(Tonnentimer);
format(query, sizeof(query), "UPDATE nlr_tonne SET Pfandflaschen=Pfandflaschen+12 WHERE id=%i", rand);
mysql_query(query);
Tonnentimer = SetTimer("Pfandadd", 60*1000*10, true);
printf("Es wurden 12 Pfandflaschenan ID: %i übermittelt!",rand);
}
mysql_free_result();
return 1;
}
Zum zweiten Problem: Hier genau andersrum, du musst den Code in die Schleife Packen:
ocmd:pfandsuchen(playerid)
{
new str[3], Float:X, Float:Y, Float:Z, query[128], string[256], rand = 1 + random(12);
for(new i;i<MAX_TONNEN;i++)
{
format(str, 3, "%i", i);
format(query, sizeof(query), "SELECT * nlr_tonne WHERE id=%i", i);
mysql_query(query);
mysql_store_result();
if(mysql_GetFloat("nlr_tonne", "X", "id", str) < 1.0)continue;
X = mysql_GetFloat("nlr_tonne", "X", "id", str), Y = mysql_GetFloat("nlr_tonne", "Y", "id", str), Z = mysql_GetFloat("nlr_tonne", "Z", "id", str);
if(!IsPlayerInRangeOfPoint(playerid, 3.0, X, Y, Z))continue;
mysql_free_result();
format(query, sizeof(query), "UPDATE nlr_tonne SET Pfandflaschen=Pfandflaschen-%i WHERE id=%i",rand, i);
mysql_query(query);
uInfo[playerid][sPfandflaschen] += rand;
format(string, sizeof(string), "ERFOLGREICH: {FFFFFF}Du hast %i {EBFF00}Pfandflaschen{FFFFFF} aus der {EBFF00}Mülltonne{FFFFFF} gekramt!", rand);
SendClientMessage(playerid, COLOR_GREEN, string);
return 1;
}
return SendClientMessage(playerid, COLOR_RED, "Keine Tonne hier.");
}
Ich habe dir mal deine MySQL Queries gelassen wie sie sind, da ich nicht weiß wie du die Funktionen (mysql_GetFloat) hast, aber unter Umständen ist das recht Ressourcenlastig geschrieben. Aber in erster Linie schauen wir mal, dass es überhaupt geht.