Undefined Symbol
#1

Hello guys i have a script.Its a lotto script the problem is its giving me a error "error 017: undefined symbol "playerid"
My code is

Код:
forward Draw();
public Draw()
{
    new Lnum = random(100) + 1; //Picks a random number
    new winner = -1; //Winners ID variable
    for(new i; i<MAX_PLAYERS; i++) //checks through all players
    {
        if(!IsPlayerConnected(i)) continue; //Players not connected
        if(GetPVarInt(i, "LottoNumber") == Lnum) winner = i; //If the players number is the winning number
        SetPVarInt(i, "LottoNumber", 0); //Resets the number
    }
    if(winner != -1) //If there was a winner
    {
        new Pname[24];
        GetPlayerName(winner, Pname, 24);
        new str[100];
        SendClientMessageToAll(0x62FF32FF, "****LOTTO INFORMATION****"); //Lotto info
        format(str, sizeof(str), "WE HAVE A WINNER! %s(%d) won $%d!!!!", Pname, winner, Jackpot);
        SendClientMessageToAll(0x62FF32FF, str); //Lotto info
        SendClientMessageToAll(0x62FF32FF, "Make sure you get a ticket for next draw /lotto [1-100]!!"); //Lotto info
        GivePlayerMoney(winner, Jackpot); //Gives the winner the cash
        SetPlayerScore(playerid, GetPlayerScore(playerid) + 5);
        Jackpot = LOTTO_START; //Resets the jackpot
    }
    if(winner == -1) //No winner
    {
                new str[100];
        SendClientMessageToAll(0x62FF32FF, "****LOTTO INFORMATION****"); //Lotto info
        format(str, sizeof(str), "There was no lotto winner for this draw. The jackpot will go up to $%d!", Jackpot);
        SendClientMessageToAll(0x62FF32FF, str); //Lotto info
        SendClientMessageToAll(0x62FF32FF, "Make sure you get a ticket for next draw /lotto [1-100]!!");
    }
    for(new s; s<100; s++)
    {
        Numbers[s] = 0; //Resets all numbers so they are usable.
    }
    return 1;
}
The line in red is where the error is happening
my total script is

Код:
#include <a_samp> //You need the a_samp include in almost every script.
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 //DCMD
#define LOTTO_JACKPOT 10000   //How much it goes up every 30 seconds or whenever someone buys a ticket
#define LOTTO_START      200000 //How much the lotto starts off at every draw
#define LOTTO_DRAW      10         //How many minutes between each lotto draw
#define TICKET_COST      1000     //How much a ticket will cost
new Jackpot = LOTTO_START;                                 //Jackpot amount
new Numbers[100];                      //So 2 people don't get the same #

public OnFilterScriptInit()
{
    SetTimer("UpdateJP", 30000, true); //Updates the jackpot
    SetTimer("Draw", LOTTO_DRAW*1000*60, true); //Updates the jackpot
    return 1;
}

forward UpdateJP(); //Always forward a timer

public UpdateJP()
{
    Jackpot = Jackpot + LOTTO_JACKPOT; //Ads to the lotto jackpot
    return 1;
}


public OnPlayerCommandText(playerid, cmdtext[])
{
    dcmd(lotto, 5, cmdtext);
    return 0;
}

dcmd_lotto(playerid, params[])
{
    if(!strlen(params)) //If the player doesn't put a nubmer
    {
        SendClientMessage(playerid, 0x62FF32FF, "***Lotto information***"); //Lotto info
        SendClientMessage(playerid, 0x62FF32FF, "Pick a number between 1 and 100 with /lotto [1-100]"); //Lotto info
        new str[75]; //Creates the string
        format(str, sizeof(str), "Current Jackpot is $%d!!!!", Jackpot); //Formats the jackpot string
        SendClientMessage(playerid, 0x62FF32FF, str); //Shows the current jackpot
    }
    new Num = strval(params); //Makes the param that the player entered into a intiger
    if(Numbers[Num] == 1) //If the number is used
    {
        new str[75]; //Makes a variable
        format(str, sizeof(str), "Lotto number %d is already taken!", Num); //Formats a str
        SendClientMessage(playerid, 0xE21F1FFF, str); //Sends the message
        return 1;
    }
    if(GetPVarInt(playerid, "LottoNumber") != 0) return SendClientMessage(playerid, 0xE21F1FFF, "You have already got a lotto number");
    SetPVarInt(playerid, "LottoNumber", Num); //Sets the players number
    Numbers[Num] = 1; //Number is used
    GivePlayerMoney(playerid, -TICKET_COST); //Takes away the ticket cost.
    new str[75];
    format(str, sizeof(str), " Lotto ticket brought! You now have number %d for the next draw", Num);
    SendClientMessage(playerid, 0x62FF32FF, str); //Lotto info
    format(str, sizeof(str), " Draws are held every %d minutes and the winners are announced. Current jackpot is $%d", LOTTO_DRAW, Jackpot);
    Jackpot = Jackpot + LOTTO_JACKPOT; //Ads to the lotto jackpot
    SendClientMessage(playerid, 0x62FF32FF, str); //Lotto info
    return 1;
}


forward Draw();
public Draw()
{
    new Lnum = random(100) + 1; //Picks a random number
    new winner = -1; //Winners ID variable
    for(new i; i<MAX_PLAYERS; i++) //checks through all players
    {
        if(!IsPlayerConnected(i)) continue; //Players not connected
        if(GetPVarInt(i, "LottoNumber") == Lnum) winner = i; //If the players number is the winning number
        SetPVarInt(i, "LottoNumber", 0); //Resets the number
    }
    if(winner != -1) //If there was a winner
    {
        new Pname[24];
        GetPlayerName(winner, Pname, 24);
        new str[100];
        SendClientMessageToAll(0x62FF32FF, "****LOTTO INFORMATION****"); //Lotto info
        format(str, sizeof(str), "WE HAVE A WINNER! %s(%d) won $%d!!!!", Pname, winner, Jackpot);
        SendClientMessageToAll(0x62FF32FF, str); //Lotto info
        SendClientMessageToAll(0x62FF32FF, "Make sure you get a ticket for next draw /lotto [1-100]!!"); //Lotto info
        GivePlayerMoney(winner, Jackpot); //Gives the winner the cash
        SetPlayerScore(playerid, GetPlayerScore(playerid) + 5);
        Jackpot = LOTTO_START; //Resets the jackpot
    }
    if(winner == -1) //No winner
    {
                new str[100];
        SendClientMessageToAll(0x62FF32FF, "****LOTTO INFORMATION****"); //Lotto info
        format(str, sizeof(str), "There was no lotto winner for this draw. The jackpot will go up to $%d!", Jackpot);
        SendClientMessageToAll(0x62FF32FF, str); //Lotto info
        SendClientMessageToAll(0x62FF32FF, "Make sure you get a ticket for next draw /lotto [1-100]!!");
    }
    for(new s; s<100; s++)
    {
        Numbers[s] = 0; //Resets all numbers so they are usable.
    }
    return 1;
}
Reply
#2

Change
pawn Код:
SetPlayerScore(playerid, GetPlayerScore(playerid) + 5);
To
pawn Код:
SetPlayerScore(winner, GetPlayerScore(playerid) + 5);
Reply
#3

Quote:
Originally Posted by EiresJason
Посмотреть сообщение
Change
pawn Код:
SetPlayerScore(playerid, GetPlayerScore(playerid) + 5);
To
pawn Код:
SetPlayerScore(winner, GetPlayerScore(playerid) + 5);
It worked!!!!!
Thank you soooo much!!!
But can u plz tell me one thing how did u fixed it?
So it doesn't happens to me again lol.
Reply
#4

Ok, not really sure how well I'll explain this but I'll give it a shot XD

So first, a variable called "winner" is set as -1.

Then this for loop is searching every players variables to see if they have won the lotto.
pawn Код:
new winner = -1; //Winners ID variable
    for(new i; i<MAX_PLAYERS; i++) //checks through all players
    {
        if(!IsPlayerConnected(i)) continue; //Players not connected
        if(GetPVarInt(i, "LottoNumber") == Lnum) winner = i; //If the players number is the winning number
        SetPVarInt(i, "LottoNumber", 0); //Resets the number
    }
So when the loop finds a player that HAS a winning ticket, it will set 'winner' as the player's ID.

So if I'm ID 5 and I won the lotto, 'winner' will be set as 5.

In this case, 'winner' is the same as your 'playerid'.

So the code you had was:
pawn Код:
SetPlayerScore(playerid, GetPlayerScore(playerid) + 5);
But because 'winner' is the real ID of the player that won the lotto, we need to replace playerid with 'winner'
pawn Код:
SetPlayerScore(winner, GetPlayerScore(playerid) + 5);
Reply
#5

However will still get the error unless you change playerid to winner in GetPlayerScore function:
pawn Код:
SetPlayerScore(winner, GetPlayerScore(winner) + 5);
Reply
#6

Quote:
Originally Posted by Konstantinos
Посмотреть сообщение
However will still get the error unless you change playerid to winner in GetPlayerScore function:
pawn Код:
SetPlayerScore(winner, GetPlayerScore(winner) + 5);
Whoops
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)