FOREACH
#1

Hi guys. im created challenge system "Vehicles Stolen"
start = working.
finish = no.

finish code:
Код:
switch(event[eType])
{
       case 3:
        {
            print("checking event 1...");
            new BestScore[3],BestID[3],string[194];
            Event[eStarted] = 0;
            Event[eStartTime] = 0;
            Event[eTimeLeft] = 0;
            foreach(InSTC,i)
            {
                print("checking event 2...");
                if(PlayerInfo[i][PlayerEventScore] > BestScore[0])
                {
                    BestScore[0] = PlayerInfo[i][PlayerEventScore];
                    BestID[0] = i;
                    PlayerPos[BestID[0]] = 1;
                    return true;
                }
                else if(PlayerInfo[i][PlayerEventScore] > BestScore[1] && PlayerInfo[i][PlayerEventScore] < BestScore[0])
                {
                    BestScore[1] = PlayerInfo[i][PlayerEventScore];
                    BestID[1] = i;
                    PlayerPos[BestID[1]] = 2;
                }
                print("checking event 3...");
                PlayerInfo[i][PlayerEventScore] = 0;
                PlayerInfo[i][PlayerInEvent] = 0;
                Iter_Remove(InSTC,i);
                print("checking event 4...");
                switch(PlayerPos[i])
                {
                    case 1:
                    {
                        print("checking event 5...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"WINNER");
                        format(string,sizeof(string),"You won the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[0]);
                        PlayerTextDrawSetString(BestID[0],CriminalDamage[BestID[0]][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[0]][pMoney] +=9500;
                    }
                    case 2:
                    {
                        print("checking event 6...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"Challenge Over");
                        format(string,sizeof(string),"You came second in the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[1]);
                        PlayerTextDrawSetString(i,CriminalDamage[i][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[1]][pMoney] +=4500;
                    }
                }
                print("checking event 7...");
                PlayerPos[i] = 0;
                SetTimerEx("HideCD", 10000, 0, "i",i);
            }
            print("checking event 8...");
        }
}
Console log:
[00:50:29] checking event 1...
[00:50:29] checking event 2...
Reply
#2

Код:
switch(event[eType])
{
       case 3:
        {
            print("checking event 1...");
            new BestScore[3],BestID[3],string[194];
            Event[eStarted] = 0;
            Event[eStartTime] = 0;
            Event[eTimeLeft] = 0;
            foreach(InSTC,i)
            {
                print("checking event 2...");
                if(PlayerInfo[i][PlayerEventScore] > BestScore[0])
                {
                    BestScore[0] = PlayerInfo[i][PlayerEventScore];
                    BestID[0] = i;
                    PlayerPos[BestID[0]] = 1;
                    return true;
                }
                else if(PlayerInfo[i][PlayerEventScore] > BestScore[1] && PlayerInfo[i][PlayerEventScore] < BestScore[0])
                {
                    BestScore[1] = PlayerInfo[i][PlayerEventScore];
                    BestID[1] = i;
                    PlayerPos[BestID[1]] = 2;
                }
                print("checking event 3...");
                PlayerInfo[i][PlayerEventScore] = 0;
                PlayerInfo[i][PlayerInEvent] = 0;
                Iter_Remove(InSTC,i);
                print("checking event 4...");
                switch(PlayerPos[i])
                {
                    case 1:
                    {
                        print("checking event 5...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"WINNER");
                        format(string,sizeof(string),"You won the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[0]);
                        PlayerTextDrawSetString(BestID[0],CriminalDamage[BestID[0]][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[0]][pMoney] +=9500;
                    }
                    case 2:
                    {
                        print("checking event 6...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"Challenge Over");
                        format(string,sizeof(string),"You came second in the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[1]);
                        PlayerTextDrawSetString(i,CriminalDamage[i][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[1]][pMoney] +=4500;
                    }
                }
                print("checking event 7...");
                PlayerPos[i] = 0;
                SetTimerEx("HideCD", 10000, 0, "i",i);
            }
            print("checking event 8...");
        }
}
That's the thing which ends it

Try removing it:

Код:
switch(event[eType])
{
       case 3:
        {
            print("checking event 1...");
            new BestScore[3],BestID[3],string[194];
            Event[eStarted] = 0;
            Event[eStartTime] = 0;
            Event[eTimeLeft] = 0;
            foreach(InSTC,i)
            {
                print("checking event 2...");
                if(PlayerInfo[i][PlayerEventScore] > BestScore[0])
                {
                    BestScore[0] = PlayerInfo[i][PlayerEventScore];
                    BestID[0] = i;
                    PlayerPos[BestID[0]] = 1;
                }
                else if(PlayerInfo[i][PlayerEventScore] > BestScore[1] && PlayerInfo[i][PlayerEventScore] < BestScore[0])
                {
                    BestScore[1] = PlayerInfo[i][PlayerEventScore];
                    BestID[1] = i;
                    PlayerPos[BestID[1]] = 2;
                }
                print("checking event 3...");
                PlayerInfo[i][PlayerEventScore] = 0;
                PlayerInfo[i][PlayerInEvent] = 0;
                Iter_Remove(InSTC,i);
                print("checking event 4...");
                switch(PlayerPos[i])
                {
                    case 1:
                    {
                        print("checking event 5...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"WINNER");
                        format(string,sizeof(string),"You won the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[0]);
                        PlayerTextDrawSetString(BestID[0],CriminalDamage[BestID[0]][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[0]][pMoney] +=9500;
                    }
                    case 2:
                    {
                        print("checking event 6...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"Challenge Over");
                        format(string,sizeof(string),"You came second in the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[1]);
                        PlayerTextDrawSetString(i,CriminalDamage[i][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[1]][pMoney] +=4500;
                    }
                }
                print("checking event 7...");
                PlayerPos[i] = 0;
                SetTimerEx("HideCD", 10000, 0, "i",i);
            }
            print("checking event 8...");
        }
}
Reply
#3

Quote:
Originally Posted by Lucky13
Посмотреть сообщение
Код:
switch(event[eType])
{
       case 3:
        {
            print("checking event 1...");
            new BestScore[3],BestID[3],string[194];
            Event[eStarted] = 0;
            Event[eStartTime] = 0;
            Event[eTimeLeft] = 0;
            foreach(InSTC,i)
            {
                print("checking event 2...");
                if(PlayerInfo[i][PlayerEventScore] > BestScore[0])
                {
                    BestScore[0] = PlayerInfo[i][PlayerEventScore];
                    BestID[0] = i;
                    PlayerPos[BestID[0]] = 1;
                    return true;
                }
                else if(PlayerInfo[i][PlayerEventScore] > BestScore[1] && PlayerInfo[i][PlayerEventScore] < BestScore[0])
                {
                    BestScore[1] = PlayerInfo[i][PlayerEventScore];
                    BestID[1] = i;
                    PlayerPos[BestID[1]] = 2;
                }
                print("checking event 3...");
                PlayerInfo[i][PlayerEventScore] = 0;
                PlayerInfo[i][PlayerInEvent] = 0;
                Iter_Remove(InSTC,i);
                print("checking event 4...");
                switch(PlayerPos[i])
                {
                    case 1:
                    {
                        print("checking event 5...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"WINNER");
                        format(string,sizeof(string),"You won the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[0]);
                        PlayerTextDrawSetString(BestID[0],CriminalDamage[BestID[0]][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[0]][pMoney] +=9500;
                    }
                    case 2:
                    {
                        print("checking event 6...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"Challenge Over");
                        format(string,sizeof(string),"You came second in the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[1]);
                        PlayerTextDrawSetString(i,CriminalDamage[i][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[1]][pMoney] +=4500;
                    }
                }
                print("checking event 7...");
                PlayerPos[i] = 0;
                SetTimerEx("HideCD", 10000, 0, "i",i);
            }
            print("checking event 8...");
        }
}
That's the thing which ends it

Try removing it:

Код:
switch(event[eType])
{
       case 3:
        {
            print("checking event 1...");
            new BestScore[3],BestID[3],string[194];
            Event[eStarted] = 0;
            Event[eStartTime] = 0;
            Event[eTimeLeft] = 0;
            foreach(InSTC,i)
            {
                print("checking event 2...");
                if(PlayerInfo[i][PlayerEventScore] > BestScore[0])
                {
                    BestScore[0] = PlayerInfo[i][PlayerEventScore];
                    BestID[0] = i;
                    PlayerPos[BestID[0]] = 1;
                }
                else if(PlayerInfo[i][PlayerEventScore] > BestScore[1] && PlayerInfo[i][PlayerEventScore] < BestScore[0])
                {
                    BestScore[1] = PlayerInfo[i][PlayerEventScore];
                    BestID[1] = i;
                    PlayerPos[BestID[1]] = 2;
                }
                print("checking event 3...");
                PlayerInfo[i][PlayerEventScore] = 0;
                PlayerInfo[i][PlayerInEvent] = 0;
                Iter_Remove(InSTC,i);
                print("checking event 4...");
                switch(PlayerPos[i])
                {
                    case 1:
                    {
                        print("checking event 5...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"WINNER");
                        format(string,sizeof(string),"You won the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[0]);
                        PlayerTextDrawSetString(BestID[0],CriminalDamage[BestID[0]][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[0]][pMoney] +=9500;
                    }
                    case 2:
                    {
                        print("checking event 6...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"Challenge Over");
                        format(string,sizeof(string),"You came second in the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[1]);
                        PlayerTextDrawSetString(i,CriminalDamage[i][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[1]][pMoney] +=4500;
                    }
                }
                print("checking event 7...");
                PlayerPos[i] = 0;
                SetTimerEx("HideCD", 10000, 0, "i",i);
            }
            print("checking event 8...");
        }
}
Already tried. same
Reply
#4

I'm not pretty sure but what's that IntSTC from foreach? ( Sorry if it's a dumb question, I got a break of SA:MP scripting and I totally forgot some basic stuff )
Reply
#5

Quote:
Originally Posted by Lucky13
Посмотреть сообщение
I'm not pretty sure but what's that IntSTC from foreach? ( Sorry if it's a dumb question, I got a break of SA:MP scripting and I totally forgot some basic stuff )
It's ok. it's iterator.

https://sampforum.blast.hk/showthread.php?tid=570937

CMD:
Код:
CMD:event(playerid,params[])
{
    if(PlayerInfo[playerid][PlayerMode] != 2) return GameTextForPlayer(playerid,"~g~you are not in freeroam",4000,3);
    if(PlayerInfo[playerid][PlayerInEvent] != 0) return GameTextForPlayer(playerid,"~g~you already in event",4000,3);
    switch(Event[eType])
    {
        case 1: //removed
        case 2: //removed
        case 3:
        {
            PlayerInfo[playerid][pInCriminalFight] = 0;
            PlayerInfo[playerid][pCriminalMoney] = 0;
            PlayerInfo[playerid][PlayerEventScore] = 0;
            PlayerInfo[playerid][PlayerInEvent] = 3;
            Iter_Add(InSTC,playerid);
            SendClientMessage(playerid,-1,"The Vehicles Stolen Challenge will begin shortly. Steal the most vehicles.");
        }
    }
    return true;
}
Reply
#6

If you try to remove this

Код:
if(PlayerInfo[i][PlayerEventScore] > BestScore[0])
                {
                    BestScore[0] = PlayerInfo[i][PlayerEventScore];
                    BestID[0] = i;
                    PlayerPos[BestID[0]] = 1;
                    return true;
                }
                else if(PlayerInfo[i][PlayerEventScore] > BestScore[1] && PlayerInfo[i][PlayerEventScore] < BestScore[0])
                {
                    BestScore[1] = PlayerInfo[i][PlayerEventScore];
                    BestID[1] = i;
                    PlayerPos[BestID[1]] = 2;
                }
would it work? Try and tell me if it prints all on console.
Reply
#7

Oh by the way. You should want that new BestScore[3] and BestID[3] to be on the top of the script. If they are there, they will always be 0 when the event is over, as they are defined again with that 'new'
Reply
#8

It's now work but only for 1 player.
finish code:
Код:
            print("checking event 1...");
            new string[194];
            Event[eStarted] = 0;
            Event[eStartTime] = 0;
            Event[eTimeLeft] = 0;
            foreach(new i : InSTC)
            {
                print("checking event 2...");
                if(PlayerInfo[i][PlayerEventScore] > BestScore[0])
                {
                    BestScore[0] = PlayerInfo[i][PlayerEventScore];
                    BestID[0] = i;
                    PlayerPos[BestID[0]] = 1;
                }
                else if(PlayerInfo[i][PlayerEventScore] > BestScore[1] && PlayerInfo[i][PlayerEventScore] < BestScore[0])
                {
                    BestScore[1] = PlayerInfo[i][PlayerEventScore];
                    BestID[1] = i;
                    PlayerPos[BestID[1]] = 2;
                }
                print("checking event 3...");
                PlayerInfo[i][PlayerEventScore] = 0;
                PlayerInfo[i][PlayerInEvent] = 0;
                print("checking event 4...");
                switch(PlayerPos[i])
                {
                    case 1:
                    {
                        print("checking event 5...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"WINNER");
                        format(string,sizeof(string),"You won the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[0]);
                        PlayerTextDrawSetString(BestID[0],CriminalDamage[BestID[0]][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[0]][pMoney] +=9500;
                    }
                    case 2:
                    {
                        print("checking event 6...");
                        PlayerTextDrawSetString(i,CriminalDamage[i][1],"Challenge Over");
                        format(string,sizeof(string),"You came second in the Vehicles Stolen Challenge with a score of %d vehicles",BestScore[1]);
                        PlayerTextDrawSetString(i,CriminalDamage[i][2],string);
                        for(new sh = 0; sh < 3; sh++) PlayerTextDrawShow(i,CriminalDamage[i][sh]);
                        PlayerInfo[BestID[1]][pMoney] +=4500;
                    }
                }
                print("checking event 7...");
                PlayerPos[i] = 0;
                SetTimerEx("HideCD", 10000, 0, "i",i);
                Iter_Remove(InSTC,i);
            }
            print("checking event 8...");
Console Log:
Код:
[01:28:44] checking event 1...
[01:28:44] checking event 2...
[01:28:44] checking event 3...
[01:28:44] checking event 4...
[01:28:44] checking event 5...
[01:28:44] checking event 7...
[01:28:44] checking event 2...
[01:28:44] [debug] Run time error 4: "Array index out of bounds"
[01:28:44] [debug]  Accessing element at index 1001 past array upper bound 999
[01:28:44] [debug] AMX backtrace:
[01:28:44] [debug] #0 0026a674 in ?? () from new.amx
[01:28:44] [debug] #1 0026b514 in public OneMinute () from new.amx
public OneMinute:
Код:
    if(Event[eStarted] == 1 && Event[eTimeLeft] > 0)
    {
        Event[eTimeLeft]--;
        if(Event[eTimeLeft] == 0) EndEvent();
    }
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)