01.12.2018, 01:34
hello bros I have a problem with this script when the names appear the first place the list goes off when another user connects the name of the second place is bounced and puts the first place
example
top lis
1 noser 100000
2 noser 0 New player bug name top list
3 rober 0
4 killer 0
5
#include <a_samp>
new
Text: text_Top5[2]
;
enum rankingEnum
{
player_Score,
player_ID
}
public OnFilterScriptInit()
{
text_Top5[0] = TextDrawCreate(79.000000, 135.000000, "Top 5");
TextDrawAlignment(text_Top5[0], 2);
TextDrawBackgroundColor(text_Top5[0], 255);
TextDrawFont(text_Top5[0], 1);
TextDrawLetterSize(text_Top5[0], 0.280000, 1.499999);
TextDrawColor(text_Top5[0], -1);
TextDrawSetOutline(text_Top5[0], 0);
TextDrawSetProportional(text_Top5[0], 1);
TextDrawSetShadow(text_Top5[0], 0);
text_Top5[1] = TextDrawCreate(16.000000, 135.000000, " ");
TextDrawBackgroundColor(text_Top5[1], 255);
TextDrawFont(text_Top5[1], 1);
TextDrawLetterSize(text_Top5[1], 0.200000, 0.999999);
TextDrawColor(text_Top5[1], -1);
TextDrawSetOutline(text_Top5[1], 0);
TextDrawSetProportional(text_Top5[1], 1);
TextDrawSetShadow(text_Top5[1], 0);
TextDrawUseBox(text_Top5[1], 1);
TextDrawBoxColor(text_Top5[1], 150);
TextDrawTextSize(text_Top5[1], 143.000000, 20.000000);
return 1;
}
public OnFilterScriptExit()
{
TextDrawDestroy(text_Top5[0]);
TextDrawDestroy(text_Top5[1]);
return 1;
}
stock GetPlayerHighestScores(array[][rankingEnum], left, right)
{
new
tempLeft = left,
tempRight = right,
pivot = array[(left + right) / 2][player_Score],
tempVar
;
while(tempLeft <= tempRight)
{
while(array[tempLeft][player_Score] > pivot) tempLeft++;
while(array[tempRight][player_Score] < pivot) tempRight--;
if(tempLeft <= tempRight)
{
tempVar = array[tempLeft][player_Score], array[tempLeft][player_Score] = array[tempRight][player_Score], array[tempRight][player_Score] = tempVar;
tempVar = array[tempLeft][player_ID], array[tempLeft][player_ID] = array[tempRight][player_ID], array[tempRight][player_ID] = tempVar;
tempLeft++, tempRight--;
}
}
if(left < tempRight) GetPlayerHighestScores(array, left, tempRight);
if(tempLeft < right) GetPlayerHighestScores(array, tempLeft, right);
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/top5", true))
{
new
playerScores[MAX_PLAYERS][rankingEnum],
index
;
for(new i; i != MAX_PLAYERS; ++i)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
playerScores[index][player_Score] = GetPlayerScore(i);
playerScores[index++][player_ID] = i;
}
}
GetPlayerHighestScores(playerScores, 0, index);
new
score_Text[256] = "~n~",
player_Name[20]
;
for(new i; i < 5; ++i)
{
if(i < index)
{
GetPlayerName(playerScores[i][player_ID], player_Name, sizeof(player_Name));
format(score_Text, sizeof(score_Text), "%s~n~~b~%d. ~w~%s - ~r~%d", score_Text, i + 1, player_Name, playerScores[i][player_Score]);
}
else
format(score_Text, sizeof(score_Text), "%s~n~~b~%d. ~r~N/A", score_Text, i + 1);
}
TextDrawSetString(text_Top5[1], score_Text);
TextDrawShowForPlayer(playerid, text_Top5[0]);
TextDrawShowForPlayer(playerid, text_Top5[1]);
return 1;
}
return 0;
}
example
top lis
1 noser 100000
2 noser 0 New player bug name top list
3 rober 0
4 killer 0
5
#include <a_samp>
new
Text: text_Top5[2]
;
enum rankingEnum
{
player_Score,
player_ID
}
public OnFilterScriptInit()
{
text_Top5[0] = TextDrawCreate(79.000000, 135.000000, "Top 5");
TextDrawAlignment(text_Top5[0], 2);
TextDrawBackgroundColor(text_Top5[0], 255);
TextDrawFont(text_Top5[0], 1);
TextDrawLetterSize(text_Top5[0], 0.280000, 1.499999);
TextDrawColor(text_Top5[0], -1);
TextDrawSetOutline(text_Top5[0], 0);
TextDrawSetProportional(text_Top5[0], 1);
TextDrawSetShadow(text_Top5[0], 0);
text_Top5[1] = TextDrawCreate(16.000000, 135.000000, " ");
TextDrawBackgroundColor(text_Top5[1], 255);
TextDrawFont(text_Top5[1], 1);
TextDrawLetterSize(text_Top5[1], 0.200000, 0.999999);
TextDrawColor(text_Top5[1], -1);
TextDrawSetOutline(text_Top5[1], 0);
TextDrawSetProportional(text_Top5[1], 1);
TextDrawSetShadow(text_Top5[1], 0);
TextDrawUseBox(text_Top5[1], 1);
TextDrawBoxColor(text_Top5[1], 150);
TextDrawTextSize(text_Top5[1], 143.000000, 20.000000);
return 1;
}
public OnFilterScriptExit()
{
TextDrawDestroy(text_Top5[0]);
TextDrawDestroy(text_Top5[1]);
return 1;
}
stock GetPlayerHighestScores(array[][rankingEnum], left, right)
{
new
tempLeft = left,
tempRight = right,
pivot = array[(left + right) / 2][player_Score],
tempVar
;
while(tempLeft <= tempRight)
{
while(array[tempLeft][player_Score] > pivot) tempLeft++;
while(array[tempRight][player_Score] < pivot) tempRight--;
if(tempLeft <= tempRight)
{
tempVar = array[tempLeft][player_Score], array[tempLeft][player_Score] = array[tempRight][player_Score], array[tempRight][player_Score] = tempVar;
tempVar = array[tempLeft][player_ID], array[tempLeft][player_ID] = array[tempRight][player_ID], array[tempRight][player_ID] = tempVar;
tempLeft++, tempRight--;
}
}
if(left < tempRight) GetPlayerHighestScores(array, left, tempRight);
if(tempLeft < right) GetPlayerHighestScores(array, tempLeft, right);
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/top5", true))
{
new
playerScores[MAX_PLAYERS][rankingEnum],
index
;
for(new i; i != MAX_PLAYERS; ++i)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
playerScores[index][player_Score] = GetPlayerScore(i);
playerScores[index++][player_ID] = i;
}
}
GetPlayerHighestScores(playerScores, 0, index);
new
score_Text[256] = "~n~",
player_Name[20]
;
for(new i; i < 5; ++i)
{
if(i < index)
{
GetPlayerName(playerScores[i][player_ID], player_Name, sizeof(player_Name));
format(score_Text, sizeof(score_Text), "%s~n~~b~%d. ~w~%s - ~r~%d", score_Text, i + 1, player_Name, playerScores[i][player_Score]);
}
else
format(score_Text, sizeof(score_Text), "%s~n~~b~%d. ~r~N/A", score_Text, i + 1);
}
TextDrawSetString(text_Top5[1], score_Text);
TextDrawShowForPlayer(playerid, text_Top5[0]);
TextDrawShowForPlayer(playerid, text_Top5[1]);
return 1;
}
return 0;
}