Best killer problem -
FiReAlEx - 12.08.2013
Hi guys, I've encountered a bug with my best killer calculator. If a player has 0 kills, it will send multiple message saying that he's the MVP. Can you help? As always, my scripts are in italian and I'll translate sideways.
pawn Код:
for(new i=0; i < (MAX_PLAYERS-1); i++)
{
if (a<Giocatore[i+1][Uccisioni]) //Player's kills
a=Giocatore[i+1][Uccisioni]; //Player's kills
}
for(new i=0; i < (MAX_PLAYERS-1); i++)
{
id[i]=-1;
if (a==Giocatore[i][Uccisioni]) //Player's kills
{
id[count]=i;
count++;
}
}
if (id[0]!=-1)
{
new i=0;
while (id[i]!=-1)
{
GetPlayerName(id[i],nome,sizeof(nome));
format(stringa,sizeof(stringa),"MVP: %s \nNumero uccisioni:%d",nome,Giocatore[i][Morti]); /*Message for 1 MVP (this on is the message that it sends when it glitches)*/
SendClientMessageToAll(Rosso,stringa);
i++;
}
}
else
{
GetPlayerName(a,nome,sizeof(nome));
format(stringa,sizeof(stringa),"L'MVP %s ha il maggior numero di uccisioni pari a %d",nome,Giocatore[a][Morti]); //Message for more MVPs
SendClientMessageToAll(Rosso,stringa);
}
for(new i; i < MAX_PLAYERS; i++)
{
if (gTeam[i] == Attack || gTeam[i] == Defense)
{
ResetPlayerWeapons(i);
SetPlayerInterior(i, 0);
SetPlayerPos(i,2441.3555,1042.6689,57.5016);
}
}
new id2[MAX_PLAYERS];
new a2=Giocatore[0][Morti];
new count2=0;
for(new i=0; i < (MAX_PLAYERS-1); i++)
{
if (a2<Giocatore[i+1][Morti])
a2=Giocatore[i+1][Morti];
}
for(new i=0; i < (MAX_PLAYERS-1); i++)
{
id2[i]=-1;
if (a2==Giocatore[i][Morti])
{
id2[count2]=i;
count2++;
}
}
if (id2[0]!=-1)
{
new i=0;
while (id2[i]!=-1)
{
GetPlayerName(id2[i],nome,sizeof(nome));
format(stringa,sizeof(stringa),"Peggior giocatore: %s \nNumero morti:%d",nome,Giocatore[i][Uccisioni]); //Message for 1 worst player
SendClientMessageToAll(Rosso,stringa);
i++;
}
}
else
{
GetPlayerName(a2,nome,sizeof(nome));
format(stringa,sizeof(stringa),"Il peggior giocatore %s ha il maggior numero di morti pari a %d",nome,Giocatore[a][Uccisioni]); //multiples worst players
SendClientMessageToAll(Rosso,stringa);
}
return 1;}
Re: Best killer problem -
Misiur - 12.08.2013
You don't need to translate texts, but if you want to help us helping you, learn how to indent your code (protip: use tab to indent, and shift+tab to outdent), and use descriptive variable names. Read about scripting basics
https://sampwiki.blast.hk/wiki/Scripting_Basics , and later search for foreach to increase your code efficiency.
pawn Код:
new
killsId[MAX_PLAYERS] = { INVALID_PLAYER_ID },
deathsId[MAX_PLAYERS] = { INVALID_PLAYER_ID },
maxKills = 1,
maxDeaths = 1,
arrayIndexKills = 0,
arrayIndexDeaths = 0;
for(new i = 0; i != MAX_PLAYERS; i++)
{
if(maxKills <= Giocatore[i][Uccisioni]) {
maxKills = Giocatore[i][Uccisioni];
killsId[arrayIndexKills++] = i;
}
if(maxDeaths <= Giocatore[i][Morti]) {
maxDeaths = Giocatore[i][Morti];
deathsId[arrayIndexDeaths++] = i;
}
if (gTeam[i] == Attack || gTeam[i] == Defense)
{
ResetPlayerWeapons(i);
SetPlayerInterior(i, 0);
SetPlayerPos(i,2441.3555,1042.6689,57.5016);
}
}
//Messages for kills
if(killsId[0] != INVALID_PLAYER_ID && killsId[1] == INVALID_PLAYER_ID) {
GetPlayerName(maxKills, nome, sizeof(nome));
format(stringa, sizeof(stringa), "L'MVP %s ha il maggior numero di uccisioni pari a %d", nome, Giocatore[killsId[0]][Uccisioni]); //Message for __single__ MVP
SendClientMessageToAll(Rosso,stringa);
}
else if (killsId[1] != INVALID_PLAYER_ID)
{
new i = 0;
do {
GetPlayerName(killsId[i], nome, sizeof(nome));
format(stringa, sizeof(stringa), "MVP: %s \nNumero uccisioni:%d", nome, Giocatore[i][Uccisioni]); /*Message for __many__ MVPs */
SendClientMessageToAll(Rosso, stringa);
} while(killsId[i++] != INVALID_PLAYER_ID);
}
else
{
SendClientMessageToAll(Rosso, "Nobody earned MVP status");
}
if(deathsId[0] != INVALID_PLAYER_ID && deathsId[1] == INVALID_PLAYER_ID) {
GetPlayerName(maxKills, nome, sizeof(nome));
format(stringa, sizeof(stringa), "Il peggior giocatore %s ha il maggior numero di morti pari a %d", nome, Giocatore[deathsId[0]][Morti]); //Message for __single__ retard
SendClientMessageToAll(Rosso,stringa);
}
else if (deathsId[1] != INVALID_PLAYER_ID)
{
new i = 0;
do {
GetPlayerName(deathsId[i], nome, sizeof(nome));
format(stringa, sizeof(stringa), "Il peggior giocatore %s ha il maggior numero di morti pari a %d", nome, Giocatore[i][Morti]); /*Message for __many__ retards */
SendClientMessageToAll(Rosso, stringa);
} while(deathsId[i++] != INVALID_PLAYER_ID);
}
else
{
SendClientMessageToAll(Rosso, "Nobody earned retard status");
}
Re: Best killer problem -
FiReAlEx - 12.08.2013
The code is indented, the copy and paste screwed it :/
By the way, thanks mate, it works really fine! REP +!
Re: Best killer problem -
FiReAlEx - 12.08.2013
Ok, sorry. Next time I'll indent it better.