GetPlayerPoolSize -
Surprice - 18.05.2015
Всех приветствую.
Обнаружил проблему после перевода циклов на 0.3.7 GetPlayerPoolSize.
Раньше всё было в норме.
Проблема состоит в том что если ввести /admins то Вы увидите список администрации ОНЛАЙН, но даже если этого администратора нет в сети его всё равно покажет (потому что он уже заходил сегодня) и не чистится в листе после выхода..
PHP код:
CMD:admins(playerid, params[])
{
SendClientMessage(playerid,-1,"Admin's Online:");
new ttext[64],ftext[4];
for(new i = GetPlayerPoolSize(); i >= 0; i--)
{
if(PlayerInfo[i][pAdmin] > 0)
{
switch(PlayerInfo[i][pAdmin]) {
case 1: ttext = "{33AA33}[Практикант]";
case 2: ttext = "{33AA33}[Ст.Практикант]";
case 3: ttext = "{33AA33}[Мл.Модератор]";
case 4: ttext = "{33AA33}[Модератор]";
case 5: ttext = "{33AA33}[Ст.Модератор]";
case 6: ttext = "{33CCFF}[Гл.Модератор]";
case 7: ttext = "{33CCFF}[Мл.Администратор]";
case 8: ttext = "{FF9900}[Администратор]";
case 9: ttext = "{FF9900}[Ст.Администратор]";
case 10: ttext = "{D900D3}[Гл.Администратор]";
case 11: ttext = "{EAC700}[Спец.Администратор]";
case 12: ttext = "{FF0000}[Основатель]{FFFFFF}"; }
if(GetPVarInt(i, "PlayerInAFK") > 0) { ftext = "Да"; }
else { ftext = "Нет"; }
SendMes(playerid,COLOR_GREY,"- %s{FFFFFF} %s[%d] [{32CD32}lvl:%d{FFFFFF}][AFK: %s]",ttext,PlayerInfo[i][pName],i,PlayerInfo[i][pAdmin],ftext);
}
}
return true;
}
Я думаю что проблема где-то в цикле...
Re: GetPlayerPoolSize -
Kqly - 18.05.2015
попробуй использовать Foreach
Re: GetPlayerPoolSize -
stabker - 18.05.2015
Проверку на IsPlayerConnected надо добавить
Re: GetPlayerPoolSize -
Azula - 18.05.2015
de ce
PHP код:
for(new i = GetPlayerPoolSize(); i >= 0; i--)
i++
Re: GetPlayerPoolSize -
eakwarp - 18.05.2015
Quote:
Originally Posted by Azula
de ce
PHP код:
for(new i = GetPlayerPoolSize(); i >= 0; i--)
i++
|
Lolwut?
Re: GetPlayerPoolSize -
ZiGGi - 18.05.2015
Нужно либо обнулять данные при выходе, либо это:
Quote:
Originally Posted by stabker
Проверку на IsPlayerConnected надо добавить
|
Re: GetPlayerPoolSize -
James_Braga - 18.05.2015
можно и так:
PHP код:
new AdminRanks[12][] =
{
"{33AA33}[Практикант]",
"{33AA33}[Ст.Практикант]",
"{33AA33}[Мл.Модератор]",
"{33AA33}[Модератор]",
"{33AA33}[Ст.Модератор]",
"{33CCFF}[Гл.Модератор]",
"{33CCFF}[Мл.Администратор]",
"{FF9900}[Администратор]",
"{FF9900}[Ст.Администратор]",
"{D900D3}[Гл.Администратор]",
"{EAC700}[Спец.Администратор]",
"{FF0000}[Основатель]{FFFFFF}"
};
new YesNo[2][] =
{
"Да",
"Нет"
};
CMD:admins(playerid, params[])
{
SendClientMessage(playerid,-1,"Admin's Online:");
for(new i = GetPlayerPoolSize(); i >= 0; i--)
{
if(PlayerInfo[i][pAdmin])
{
SendMes(playerid,COLOR_GREY,"- %s{FFFFFF} %s[%d] [{32CD32}lvl:%d{FFFFFF}][AFK: %s]",
AdminRanks[PlayerInfo[i][pAdmin]],
PlayerInfo[i][pName],
i,
PlayerInfo[i][pAdmin],
YesNo[GetPVarInt(i, "PlayerInAFK")]);
}
}
return true;
}
OnPlayerDisconnect(playerid, reason)
{
PlayerInfo[playerid][pAdmin] = 0;
};
или так...
PHP код:
new AdminRanks[12][] =
{
"{33AA33}[Практикант]",
"{33AA33}[Ст.Практикант]",
"{33AA33}[Мл.Модератор]",
"{33AA33}[Модератор]",
"{33AA33}[Ст.Модератор]",
"{33CCFF}[Гл.Модератор]",
"{33CCFF}[Мл.Администратор]",
"{FF9900}[Администратор]",
"{FF9900}[Ст.Администратор]",
"{D900D3}[Гл.Администратор]",
"{EAC700}[Спец.Администратор]",
"{FF0000}[Основатель]{FFFFFF}"
};
new YesNo[2][] =
{
"Да",
"Нет"
};
CMD:admins(playerid, params[])
{
SendClientMessage(playerid,-1,"Admin's Online:");
for(new i = GetPlayerPoolSize(); i >= 0; i--)
{
if(IsPlayerConnected() && PlayerInfo[i][pAdmin])
{
SendMes(playerid,COLOR_GREY,"- %s{FFFFFF} %s[%d] [{32CD32}lvl:%d{FFFFFF}][AFK: %s]",
AdminRanks[PlayerInfo[i][pAdmin]],
PlayerInfo[i][pName],
i,
PlayerInfo[i][pAdmin],
YesNo[GetPVarInt(i, "PlayerInAFK")]);
}
}
return true;
}
а ещё можно не выпендриваться и сделать так:
PHP код:
CMD:admins(playerid, params[])
{
SendClientMessage(playerid,-1,"Admin's Online:");
new ttext[64],ftext[4];
for(new i = GetPlayerPoolSize(); i >= 0; i--)
{
if(IsPlayerConnected())
{
if(PlayerInfo[i][pAdmin] > 0)
{
switch(PlayerInfo[i][pAdmin]) {
case 1: ttext = "{33AA33}[Практикант]";
case 2: ttext = "{33AA33}[Ст.Практикант]";
case 3: ttext = "{33AA33}[Мл.Модератор]";
case 4: ttext = "{33AA33}[Модератор]";
case 5: ttext = "{33AA33}[Ст.Модератор]";
case 6: ttext = "{33CCFF}[Гл.Модератор]";
case 7: ttext = "{33CCFF}[Мл.Администратор]";
case 8: ttext = "{FF9900}[Администратор]";
case 9: ttext = "{FF9900}[Ст.Администратор]";
case 10: ttext = "{D900D3}[Гл.Администратор]";
case 11: ttext = "{EAC700}[Спец.Администратор]";
case 12: ttext = "{FF0000}[Основатель]{FFFFFF}"; }
if(GetPVarInt(i, "PlayerInAFK") > 0) { ftext = "Да"; }
else { ftext = "Нет"; }
SendMes(playerid,COLOR_GREY,"- %s{FFFFFF} %s[%d] [{32CD32}lvl:%d{FFFFFF}][AFK: %s]",ttext,PlayerInfo[i][pName],i,PlayerInfo[i][pAdmin],ftext);
}
}
}
return true;
}
Re: GetPlayerPoolSize -
White_116 - 18.05.2015
Решение чтобы быстро "обнулить" игрока.
PHP код:
new PlayerInfo[MAX_PLAYERS+1][ENUM];
OnPlayerDisconnect(playerid, reason)
{
PlayerInfo[playerid] = PlayerInfo[MAX_PLAYERS];
};
Re: GetPlayerPoolSize -
SoNikMells - 18.05.2015
James_Braga, сам то понял, что написал?
Кого проверяешь в IsPlayerConnected() — пустоту?
Далее по поводу: new YesNo — угадай к чему придерусь? Я подскажу, PVar возвращает истину в случаи, если игрок AFK, значит из массива вставится точно не первая строка. А что если у нас PVar имеет не только 0|1 ? Что если там секунды записываются игрока в AFK? Где строчку взять? Да-да, у тебя crashdected будет ругаться.
Смотри что надо советовать:
PHP код:
CMD:admins(playerid, params[])
{
new str[128], i; static rank[12][] =
{
"{33AA33}[Практикант]",
"{33AA33}[Ст.Практикант]",
"{33AA33}[Мл.Модератор]",
"{33AA33}[Модератор]",
"{33AA33}[Ст.Модератор]",
"{33CCFF}[Гл.Модератор]",
"{33CCFF}[Мл.Администратор]",
"{FF9900}[Администратор]",
"{FF9900}[Ст.Администратор]",
"{D900D3}[Гл.Администратор]",
"{EAC700}[Спец.Администратор]",
"{FF0000}[Основатель]"
};
SendClientMessage(playerid,-1,"Admin's Online:");
for(i = GetPlayerPoolSize(); i >= 0; i--) if(IsPlayerConnected(i) && PlayerInfo[i][pAdmin])
{
format(str, 128, "- %s{FFFFFF} %s[%i] [{32CD32}lvl:%i{FFFFFF}][AFK: %s]",
rank[PlayerInfo[i][pAdmin]], PlayerInfo[i][pName], i, PlayerInfo[i][pAdmin],
GetPVarInt(i, "PlayerInAFK") ? ("Да") : ("Нет"));
SendClientMessage(playerid, COLOR_GREY, str);
}
return str[1] ? true : SendClientMessage(playerid,-1,"Нет администраторов Online");
}
Re: GetPlayerPoolSize -
MeNaceSwagga - 18.05.2015
Quote:
Originally Posted by ZiGGi
Нужно либо обнулять данные при выходе, либо это:
|
Мне кажется когда лучше 2 варианта сделаны.