SA-MP Forums Archive
New to Loops such as these ones, any advice? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: New to Loops such as these ones, any advice? (/showthread.php?tid=677520)



New to Loops such as these ones, any advice? - SkyFlare - 18.07.2020

This function is to get the Free Biz ID in my Database... (well actually it doesnt read the database)
Ex: I have BIZ ids 1,2,3,5: Output: Biz ID 4 is free.
This is what the loop looks like and I am just wondering if there's a smarter way to do this, it works right now though.

But I don't think it'll work if I change it in realtime, as the Array's ID's will change if I add ID 4 in, and delete ID 2, my result may not output 2....
PHP Code:
GetFreeBizID()
{
    new 
ResultLastID;
    for(new 
0MAX_BIZSi++)
    {
        if(
== 0)
        {
            
printf("Iteration [%i]"i);//Result 0
            
printf("DynamicBizs[i][ID]: [%i]"DynamicBizs[i][ID]);// Result 1
            
LastID DynamicBizs[i][ID];
            continue;
        }
        if(
LastID == DynamicBizs[i][ID]-&& DynamicBizs[i][ID] == LastID +1)
        {
            
LastID DynamicBizs[i][ID];
            
printf("Iteration [%i]"i);//Result 0
            
printf("DynamicBizs[i][ID]: [%i]"DynamicBizs[i][ID]);// Result 1
            
continue;
        }
        if(
LastID == DynamicBizs[i][ID]-2)
        {
            
Result i+1;
            break;
        }
    }
    
printf("GetFreeBizID Result: %i"Result);
    return 
Result;




Re: New to Loops such as these ones, any advice? - grymtn - 18.07.2020

I dont exactly understand what you are trying to do but if you are just trying to get one id, something like below should work. If you remove break you will see all ids.

Important edit: You should never match database id with in game object id that your script gives. Just create another variable called dbid in your enum and do your database jobs on that id. Its fool proof and less resource requiring since you are taking down your loop workload.

Code:
for(new i=0; i<maxbiz; i++)
{
    if(biz[i][taken]==free)
    {
        //The id you want is i. i is free. Do your action here.
        Break;
    }
}



Re: New to Loops such as these ones, any advice? - GameOvr - 18.07.2020

This isn't the way to do it. You should consider array as the ID. do what grymton told. make a seperate token called taken and make it true when taken and false when its removed then loop through all and take the array index which taken is false using break;


Re: New to Loops such as these ones, any advice? - SkyFlare - 18.07.2020

Welp, doesn't matter I totally forgot about Y_Iterate


Re: New to Loops such as these ones, any advice? - xRadical3 - 18.07.2020

Quote:
Originally Posted by SkyFlare
View Post
Welp, doesn't matter I totally forgot about Y_Iterate
Create a iter variable.
pawn Code:
new Iterator:Business<MAX_BUSINESS>;
When you load or create new business, do this for add to iter:
pawn Code:
Iter_Add(Business, id);
Now you can only get the free slot with this function:
pawn Code:
Iter_Free(Business);