need help in iter_random :(
#1

I am trying to make a function in which the system chooses on player from each team at a time. But it is not working perfectly. It only chooses one player from all player online. Not each player from one team.
I mean it chooses one player from all players whereas it has to chooses one player from each team randomly.

Here is the code :

pawn Код:
public RandomBomb(playerid)
{
    if(gTeam[playerid] == Terrorists)
    {
        new GangLeader[MAX_PLAYERS];
        new randPlayer = Iter_Random(Player);


        GangLeader[Terrorists] = randPlayer;
        SetPlayerAttachedObject(GangLeader[Terrorists], 0, 1252, 1, 0.039000, -0.192999, 0.000000, 0.000000, 87.299972, 1.000000, 1.000000, 1.000000, 1.000000, 0, 0);
        SendClientMessage(GangLeader[Terrorists], -1, " You have been chosen to Plant the bomb.");
        tChosen[playerid] = 1;
    }
    return 1;
}
   
public RandomDefuse(playerid)
{
    if(gTeam[playerid] == Counter_T)
    {
        new CGangLeader[MAX_PLAYERS];
        new CrandPlayer = Iter_Random(Player);


        CGangLeader[Counter_T] = CrandPlayer;
        SetPlayerAttachedObject(CGangLeader[Counter_T], 0, 1719, 1, 0.000000, -0.140999, -0.004999, 88.899978, 0.599999, 0.299999, 1.000000, 1.000000, 1.000000, 0, 0);
        SendClientMessage(CGangLeader[Counter_T], -1, " You have been chosen to Defuse the bomb.");
        cChosen[playerid] = 1;
    }
    return 1;
}
Here, I am calling this function.
pawn Код:
if (ServerMinutes == 3 && ServerSeconds == 54)
        {
            RandomBomb(playerid);
            RandomDefuse(playerid);
           
        }
hope you understood what my problem is.

Please Help
Reply
#2

Since you are already using foreach, why not use two more iterators - one for each team - instead of gTeam? Wherever you use "gTeam[playerid] =", you instead use Iter_Add and Iter_Remove.
Reply
#3

Sir, Can you give me an example. I really don't know about Iter function
Reply
#4

pawn Код:
new Iterator:Terrorists<MAX_PLAYERS>;
pawn Код:
Iter_Add(Terrorists, playerid);
// instead of:
gTeam[playerid] = Terrorists;
pawn Код:
Iter_Remove(Terrorists, playerid);
// instead of:
gTeam[playerid] = 0; // (or NO_TEAM)
pawn Код:
foreach(Terrorists, i)
{
    SendClientMessage(i, -1, "You are a terrorist.");
}
pawn Код:
new random_terrorist = Iter_Random(Terrorists);
I'm not sure if foreach guards against duplicate values, but if you're uncomfortable you can check with Iter_Contains before adding the player.
Reply
#5

thanks sir.
You are GREAT

thank you ****** and Vince once again
Reply
#6

******, Is it correct?
pawn Код:
public OnPlayerSpawn(playerid)
{
if(gTeam[playerid] == Terrorists)Iter_Add(Terrorists, playerid);
}
Reply
#7

Sir, How exactly does Iter_Add work ? will it work for adding(+1) or as setting(==) ?
Reply
#8

Sir, As you said.. foreach gaurds adding multiple values same time.

can i do this ?
pawn Код:
if(Iter_Contains(Counter_T, playerid)){Iter_Remove(Counter_T, playerid);}
Iter_Add(Terrorists, playerid);
Reply
#9

You can but it's not really needed because as ****** has said in foreach's thread: If the value is invalid or not present it is simply ignored.
Reply
#10

Oh ok.. Thanks
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)