foreach Iter_Add is not adding elements
#1

So I have a bunch of iterators @ top of my script:
pawn Код:
static Iterator:Spawns<MAX_MAP_SPAWNS>;    // <300>
static Iterator:FreeSpawns<MAX_MAP_SPAWNS>;       // <300>
static Iterator:CheckedItems<MAX_CHECKED_ITEMS>; // around <300>
static Iterator:RecentPickups[MAX_PLAYERS]<MAX_CONSECUTIVE_PICKUPS>; // <10>
static Iterator:SkippedPickups[MAX_PLAYERS]<MAX_CONSECUTIVE_PICKUPS>; // <10>
Under OnFilterScriptInit:
pawn Код:
Iter_Init(RecentPickups);
    Iter_Init(SkippedPickups);
None of these are working when I try to add an element with Iter_Add. Whenever a new round starts I try to add element to the Spawn iterator but it just doesn't work. For example:

pawn Код:
forward LoadMapItems_Fetched(mapid);
public LoadMapItems_Fetched(mapid) {

    new rows, fields;
    cache_get_data(rows, fields);
    if(rows) {
   
        // Clear other data from the iterators
        Iter_Clear(CheckedItems);
        Iter_Clear(Spawns);
        Iter_Clear(FreeSpawns);
   
        for(new i=0; i<rows; i++) {
           
            // ...
           
            Iter_Add(Spawns, someData);
            printf("Adding spawn %d", someData);
           
        }
   
        printf("Spawns added = %d", Iter_Count(Spawns));
   
    }
    // ...
    return 1;
   
}
Will print out:

Код:
[12:02:07] Adding spawn 3520
[12:02:07] Adding spawn 3521
[12:02:07] Adding spawn 3522
[12:02:07] Adding spawn 3523
[12:02:07] Adding spawn 3524
[12:02:07] Adding spawn 3525
[12:02:07] Adding spawn 3526
[12:02:07] Adding spawn 3527
[12:02:07] Adding spawn 3528
[12:02:07] Adding spawn 3529
[12:02:07] Adding spawn 3530
[12:02:07] Adding spawn 3531
[12:02:07] Adding spawn 3532
[12:02:07] Adding spawn 3533
[12:02:07] Adding spawn 3534
[12:02:07] Adding spawn 3535
[12:02:07] Adding spawn 3536
[12:02:07] Adding spawn 3537
[12:02:07] Adding spawn 3538
[12:02:07] Adding spawn 3539
[12:02:07] Adding spawn 3540
[12:02:07] Adding spawn 3541
[12:02:07] Adding spawn 3542
[12:02:07] Adding spawn 3543
[12:02:07] Adding spawn 3544
[12:02:07] Adding spawn 3545
[12:02:07] Adding spawn 3546
[12:02:07] Adding spawn 3547
[12:02:07] Adding spawn 3548
[12:02:07] Adding spawn 3549
[12:02:07] Adding spawn 3550
[12:02:07] Adding spawn 3551
[12:02:07] Spawns added = 0
However, if I make an iterator VERY HUGE, everything suddenly seems to work fine. This would work:
pawn Код:
static Iterator:Spawns<10000>;
static Iterator:FreeSpawns<10000>;
static Iterator:CheckedItems<10000>;
static Iterator:RecentPickups[MAX_PLAYERS]<10000>;
static Iterator:SkippedPickups[MAX_PLAYERS]<10000>;
Am I doing something wrong here?
Reply
#2

Quote:
Originally Posted by ******
Посмотреть сообщение
Unfortunately yes, you are doing something wrong. The number after an iterator doesn't define its SIZE but its RANGE:

pawn Код:
static Iterator:Spawns<MAX_MAP_SPAWNS>;    // <300>
This declaration says that "Spawns" can hold values between 0 and 299, not 300 of any value. If you just want to put a load of values in a container and loop over them use regular arrays.
Ah, figures Thanks a lot.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)