COMMAND:lotto(playerid, params[])
{
new string[256], number;
if(sscanf(params, "d", number)) return SendClientMessage(playerid, -1, "Syntax: {FF9900}/lotto [1 - 80]");
if(LottoNumber[playerid] > 0) return SendClientMessage(playerid, -1, "You already have a lotto number.");
if(number < 1 || number > 80) return SendClientMessage(playerid, -1, "Invalid lotto number. Number must be between 1 and 80.");
if(LottoNum == 0) return SendClientMessage(playerid, -1, "There is not a lottery going on.");
else
{
format(string, sizeof(string), "You picked number %d for the lottery.", number);
SendClientMessage(playerid, -1, string);
LottoNumber[playerid] = number;
GivePlayerMoney(playerid, -100);
}
return 1;
}
for(new i = 0; i<MAX_PLAYERS; i++)
if(LottoNumber[i] == number)
return SendClientMessage(playerid, -1, "That number is already taken by some player.");
COMMAND:lotto(playerid, params[])
{
new string[256], number;
if(sscanf(params, "d", number)) return SendClientMessage(playerid, -1, "Syntax: {FF9900}/lotto [1 - 80]");
if(LottoNumber[playerid] > 0) return SendClientMessage(playerid, -1, "You already have a lotto number.");
if(number < 1 || number > 80) return SendClientMessage(playerid, -1, "Invalid lotto number. Number must be between 1 and 80.");
if(LottoNum == 0) return SendClientMessage(playerid, -1, "There is not a lottery going on.");
for(new i = 0; i<MAX_PLAYERS; i++)
if(LottoNumber[i] == number)
return SendClientMessage(playerid, -1, "That number is already taken by some player.");
format(string, sizeof(string), "You picked number %d for the lottery.", number);
SendClientMessage(playerid, -1, string);
LottoNumber[playerid] = number;
GivePlayerMoney(playerid, -100);
return 1;
}
// On top of your gamemode:
#define MAX_LOTTO_NUMBERS 100
new LottoNumbers[MAX_LOTTO_NUMBERS];
// This goes in the command:
if(LottoNumbers[number] == 1)
{
// Lotto number is taken.
return 1;
}
LottoNumbers[number] = 1;
// To reset the lotto numbers use the code below:
for(new i = 0; i < MAX_LOTTO_NUMBERS; i++)
{
LottoNumbers[i] = 0;
}
// On top of your gamemode:
#define MAX_LOTTO_NUMBERS 100
new Bool:LottoNumbers[MAX_LOTTO_NUMBERS];
// This goes in the command:
if(LottoNumbers[number] == true)
{
// Lotto number is taken.
return 1;
}
LottoNumbers[number] = true;
// To reset the lotto numbers use the code below:
for(new i = 0; i < MAX_LOTTO_NUMBERS; i++)
{
LottoNumbers[i] = false;
}
Here:
pawn Код:
|
That is a more efficient way of doing what I've posted. But if you're going for the most efficient you might want to use new bool:LottoNumbers[MAX_LOTTO_NUMBERS]; instead, because that will reduce the space needed for all that variables, since you'll just use 1 or 0 (true or false).
![]() |
#define LOTTO_MIN 25000 #define LOTTO_MAX 75000 #define LOTTO_CAP 2000000 #define LOTTO_NUMBER_MAX 100 new lottoFunds; //player pvar LottoNumber is the ticket number they bought, lost on quit setLottoFunds(funds) { lottoFunds = funds; } getLottoFunds() { return lottoFunds; } adjustLottoFunds(offset) { if(lottoFunds+offset < LOTTO_CAP) lottoFunds += offset; } saveLottoFunds() { format(query, sizeof(query), "UPDATE `misc` SET `jackpot` = %d",getLottoFunds()); mysql_function_query(g_mysql_handle, query, true, "EmptyCallback", ""); } lottoOnGameModeExit() { saveLottoFunds(); } YCMD:playlotto(playerid, params[], help) { if(help) { SendClientMessage(playerid, X11_WHITE, "Force the lottery to run"); return 1; } playLotto(); return 1; } YCMD:setjackpot(playerid, params[], help) { if(help) { SendClientMessage(playerid, X11_WHITE, "Override the lotto funds"); return 1; } new funds; if(!sscanf(params, "d", funds)) { setLottoFunds(funds); SendClientMessage(playerid, COLOR_LIGHTGREEN, "[Notice]: Funds Adjusted!"); } else { format(query, sizeof(query), "Lotto Jackpot: $%s",getNumberString(getLottoFunds())); SendClientMessage(playerid, COLOR_LIGHTGREEN, query); } return 1; } playLotto() { new lottoNumber = RandomEx(1,LOTTO_NUMBER_MAX); new playerisWinner[MAX_PLAYERS],numWinners,string[128]; format(string, sizeof(string), "* Lotto: The winning number is: %d, with a total jackpot of $%s!",lottoNumber,getNumberString(getLottoFunds())); NewsMessage(X11_RED,string); foreach(Player, i) { if(IsPlayerConnectEx(i)) { if(getPlayerLottoTicket(i) == lottoNumber) { playerisWinner[i] = 1; numWinners++; } deleteLottoTicket(i); } } if(numWinners != 0) { new perPlayerJackpot = floatround(getLottoFunds()/numWinners); for(new i=0;i<MAX_PLAYERS;i++) { if(playerisWinner[i] == 1) { GiveMoneyEx(i, perPlayerJackpot); format(string, sizeof(string), "* Lotto: %s has won $%s from the lottery!",GetPlayerNameEx(i, ENameType_RPName_NoMask), getNumberString(perPlayerJackpot)); NewsMessage(X11_RED,string); adjustLottoFunds(-perPlayerJackpot); } } adjustLottoFunds(LOTTO_MIN); //reset the lotto! } else { new raise = RandomEx(5000, 25000); adjustLottoFunds(raise); format(string, sizeof(string), "* Lotto: There are no winners for this lotto! The jackpot has now raised to: $%s",getNumberString(getLottoFunds())); NewsMessage(X11_RED,string); } saveLottoFunds(); MassHintMessage(COLOR_LIGHTGREEN, "You can buy a lottery ticket at any 24/7"); } YCMD:lottoinfo(playerid, params[], help) { if(help) { SendClientMessage(playerid, X11_WHITE, "Displays lottery info"); return 1; } new number; if((number = getPlayerLottoTicket(playerid)) != 0) { format(query, sizeof(query), "* Your ticket number: %d",number); SendClientMessage(playerid, X11_YELLOW, query); } else { SendClientMessage(playerid, X11_TOMATO_2, "* You don't have a lotto ticket!"); } format(query, sizeof(query), "* Jackpot: $%s",getNumberString(getLottoFunds())); SendClientMessage(playerid, X11_YELLOW, query); format(query, sizeof(query), "* Number of participants: %d",GetNumLottoPlayers()); SendClientMessage(playerid, X11_YELLOW, query); return 1; } YCMD:trashlotto(playerid, params[], help) { if(help) { SendClientMessage(playerid, X11_WHITE, "Trash your lottery ticket"); return 1; } if(getPlayerLottoTicket(playerid) != 0) { deleteLottoTicket(playerid); SendClientMessage(playerid, X11_YELLOW, "* Ticket Trashed!"); } else { SendClientMessage(playerid, X11_TOMATO_2, "* You don't have a ticket!"); } return 1; } deleteLottoTicket(playerid) { DeletePVar(playerid, "LottoNumber"); } GetNumLottoPlayers() { new num; foreach(Player, i) { if(getPlayerLottoTicket(i) != 0) num++; } return num; } giveRandomLottoNumber(playerid) { new onumber = getPlayerLottoTicket(playerid); if(onumber != 0) { return onumber; } onumber = RandomEx(1,LOTTO_NUMBER_MAX); setPlayerLottoTicket(playerid, onumber); return onumber; } setPlayerLottoTicket(playerid, number) { SetPVarInt(playerid, "LottoNumber", number); } getPlayerLottoTicket(playerid) { return GetPVarInt(playerid, "LottoNumber"); } isLottoNumberAcceptable(number) { return number < LOTTO_NUMBER_MAX && number > 0; } getLottoMax() { return LOTTO_NUMBER_MAX;