-
Оптимизация
Ув. пользователи портала Pro-pawn будьте любезны помогите оптимизировать и добавить чтобы кикало после 15 минут AFK, просто сам в этом не очень разбираюсь.
Ко всем new:
PHP код:
new plafk[MAX_PLAYERS];
В паблик OnPlayerSpawn:
PHP код:
plafk[playerid] = 0;
В паблик OnPlayerConnect:
PHP код:
plafk[playerid] = -2;
В паблик OnPlayerDeath:
PHP код:
plafk[playerid] = -2;
В паблик OnPlayerUpdate:
При выходе из АФК игроку будет писать его время АФК
PHP код:
if(plafk[playerid] > -2)
{
if(plafk[playerid] > 0)
{
new string[128];
format(string,sizeof(string),"Время вашего АФК: %s",ConvertSeconds(plafk[playerid]));
SendClientMessage(playerid, COLOR_ORANGE, string);
SetPlayerChatBubble(playerid, "АФК: завершено", COLOR_WHITE, 10.0, 1);
}
plafk[playerid] = 0;
}
В паблик OnGameModeInit:
PHP код:
SetTimer("AFKSystem", 1000, 1);
В конец мода:
PHP код:
forward AFKSystem();
public AFKSystem()
{
for(new playerid;playerid < MAX_PLAYERS;playerid++)
{
if(IsPlayerConnected(playerid))
{
if(plafk[playerid] == 0) plafk[playerid] -= 1;
else if(plafk[playerid] == -1)
{
plafk[playerid] = 1;
new string[128];
format(string, sizeof(string), "АФК: %s", ConvertSeconds(plafk[playerid]));
SetPlayerChatBubble(playerid, string, COLOR_WHITE, 10.0, 70000000);
}
else if(plafk[playerid] > 0)
{
new string[255];
plafk[playerid] += 1;
format(string, sizeof(string), "АФК: %s", ConvertSeconds(plafk[playerid]));
SetPlayerChatBubble(playerid, string, COLOR_WHITE, 10.0, 70000000);
}
}
}
}
Тоже в конец мода, отвечает за время:
PHP код:
stock ConvertSeconds(time)
{
new string[128];
if(time < 60) format(string, sizeof(string), "%d секунд", time);
else if(time == 60) string = "1 минуту";
else if(time > 60 && time < 3600)
{
new Float: minutes;
new seconds;
minutes = time / 60;
seconds = time % 60;
format(string, sizeof(string), "%.0f минут и %d секунд", minutes, seconds);
}
else if(time == 3600) string = "1 час";
else if(time > 3600)
{
new Float: hours;
new minutes_int;
new Float: minutes;
new seconds;
hours = time / 3600;
minutes_int = time % 3600;
minutes = minutes_int / 60;
seconds = minutes_int % 60;
format(string, sizeof(string), "%.0f:%.0f:%d", hours, minutes, seconds);
}
return string;
}
-
Вот мой вариант:
Ко всем new
PHP код:
new is_afk[MAX_PLAYERS];
new afk_time[2][MAX_PLAYERS];
В OnPlayerConnect
PHP код:
is_afk[playerid] = 0;
afk_time[0][playerid] = 0, afk_time[1][playerid] = 0;
В AfkSystem
PHP код:
if(is_afk[playerid] != 0) is_afk[playerid] = 0;
else {
afk_time[0][playerid]++;
if(afk_time[0][playerid] > 60) afk_time[1][playerid]++,afk_time[0][playerid] = 0;
if(afk_time[1][playerid] > 15) return Kick(playerid); // тут кикаем игрока
new string[50];
format(string,sizeof(string),"АФК: %02d:%02d",afk_time[1][playerid],afk_time[0][playerid]);
SetPlayerChatBubble(playerid, string, COLOR_WHITE, 10.0, 70000000);
}
В OnPlayerUpdate
PHP код:
is_afk[playerid] = 1;
- - - Добавлено - - -
Если хочешь такие же функции что и в твоем Convert Seconds, то вот:
PHP код:
if(is_afk[playerid] != 0) is_afk[playerid] = 0;
else {
afk_time[0][playerid]++;
if(afk_time[0][playerid] > 60) afk_time[1][playerid]++,afk_time[0][playerid] = 0;
if(afk_time[1][playeird] > 15) return Kick(playerid); // тут кикаем игрока
new string[50];
if(afk_time[1][playerid] <= 0) format(string,sizeof(string),"АФК: %d секунд",afk_time[0][playerid]);
else format(string, 50, "АФК: %02d:%02d", afk_time[1][playerid], afk_time[0][playerid]);
SetPlayerChatBubble(playerid, string, COLOR_WHITE, 10.0, 70000000);
}
А больше подсчета минут тебе не нужно, ибо ты хочешь кик после 15 минут.
-
Спасибо, можно еще вопрос,
В AfkSystem вы говорите так?
PHP код:
forward AFKSystem();
public AFKSystem()
{
if(is_afk[playerid] != 0) is_afk[playerid] = 0;
else
{
afk_time[0][playerid]++;
if(afk_time[0][playerid] > 60) afk_time[1][playerid]++,afk_time[0][playerid] = 0;
if(afk_time[1][playeird] > 15) return Kick(playerid); // тут кикаем игрока
new string[50];
format(string,sizeof(string),"АФК: %02d:%02d",afk_time[1][playerid],afk_time[0][playerid]);
SetPlayerChatBubble(playerid, string, COLOR_WHITE, 10.0, 70000000);
}
}
-
PHP код:
afk_time[0][playerid] = 0, afktime[1][playerid] = 0;// тут исправь
afk_time[0][playerid] = 0, afk_time[1][playerid] = 0;
PHP код:
if(afk_time[1][playeird] > 15) return Kick(playerid); // тут тоже
if(afk_time[1][playerid] > 15) return Kick(playerid);
PHP код:
forward AFKSystem();
public AFKSystem()
{
for(new playerid;playerid < MAX_PLAYERS;playerid++)
{
if(IsPlayerConnected(playerid))
{
if(is_afk[playerid] != 0) is_afk[playerid] = 0;
else
{
afk_time[0][playerid]++;
if(afk_time[0][playerid] > 60) afk_time[1][playerid]++,afk_time[0][playerid] = 0;
if(afk_time[1][playerid] > 15) return Kick(playerid); // тут кикаем игрока
new string[50];
format(string,sizeof(string),"АФК: %02d:%02d",afk_time[1][playerid],afk_time[0][playerid]);
SetPlayerChatBubble(playerid, string, COLOR_WHITE, 10.0, 70000000);
}
}
}
}
-
При компиляции выходит Варнинг
warning 209: function "AFKSystem" should return a value
-
PHP код:
forward AFKSystem();
public AFKSystem()
{
for(new playerid;playerid < MAX_PLAYERS;playerid++)
{
if(IsPlayerConnected(playerid))
{
if(is_afk[playerid] != 0) is_afk[playerid] = 0;
else
{
afk_time[0][playerid]++;
if(afk_time[0][playerid] > 60) afk_time[1][playerid]++,afk_time[0][playerid] = 0;
if(afk_time[1][playerid] > 15) return Kick(playerid); // тут кикаем игрока
new string[50];
format(string,sizeof(string),"АФК: %02d:%02d",afk_time[1][playerid],afk_time[0][playerid]);
SetPlayerChatBubble(playerid, string, COLOR_WHITE, 10.0, 70000000);
}
}
}
return 1;
}
-
-
Если значение переменной не может быть меньше 0 или больше 255 - можно использовать char, по идее
-
Цитата:
Сообщение от
DOS-Protection
Оптимизаторы от бога.
Ну вот если бы ты предложил свой вариант, твой пост имел бы хоть какой то смысл, а так...
-
Код не рабочий, не показывает то что ты АФК: %02d:%02d
-
-
Цитата:
Сообщение от
Salvador
А текст над игроком не будет выводиться АФК