Alles anzeigenZu 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.
Leider ist es aktuell so, wenn es diese ID nicht gibt, versucht er es trotzdem zu übergeben

Aktueller Code:
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_field_rows())
{
KillTimer(Tonnentimer);
Tonnentimer = SetTimer("Pfandadd", 10000, false);
printf("Es konnten keine Pfandflaschen an ID: %i übermittelt werden!",rand);
}
else
{
KillTimer(Tonnentimer);
new rand1 = 1 + random(11);
format(query, sizeof(query), "UPDATE nlr_tonne SET Pfandflaschen=Pfandflaschen+%i WHERE id=%i",rand1, rand);
mysql_query(query);
Tonnentimer = SetTimer("Pfandadd", 10000, true);
printf("Es wurden %i Pfandflaschen an ID: %i übermittelt!",rand1,rand);
}
mysql_free_result();
return 1;
}



