Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±

    Оптимизация

    Ув. пользователи портала 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(playeridCOLOR_ORANGEstring); 
    SetPlayerChatBubble(playerid"АФК: завершено"COLOR_WHITE10.01); 

    plafk[playerid] = 0

    В паблик OnGameModeInit:
    PHP код:
    SetTimer("AFKSystem"10001); 
    В конец мода:
    PHP код:
    forward AFKSystem(); 
    public 
    AFKSystem() 

    for(new 
    playerid;playerid MAX_PLAYERS;playerid++) 

    if(
    IsPlayerConnected(playerid)) 

    if(
    plafk[playerid] == 0plafk[playerid] -= 1
    else if(
    plafk[playerid] == -1

    plafk[playerid] = 1
    new 
    string[128]; 
    format(stringsizeof(string), "АФК: %s"ConvertSeconds(plafk[playerid])); 
    SetPlayerChatBubble(playeridstringCOLOR_WHITE10.070000000); 

    else if(
    plafk[playerid] > 0

    new 
    string[255]; 
    plafk[playerid] += 1
    format(stringsizeof(string), "АФК: %s"ConvertSeconds(plafk[playerid])); 
    SetPlayerChatBubble(playeridstringCOLOR_WHITE10.070000000); 




    Тоже в конец мода, отвечает за время:
    PHP код:
    stock ConvertSeconds(time

    new 
    string[128]; 
    if(
    time 60format(stringsizeof(string), "%d секунд"time); 
    else if(
    time == 60string "1 минуту"
    else if(
    time 60 && time 3600

    new 
    Floatminutes
    new 
    seconds
    minutes time 60
    seconds time 60
    format(stringsizeof(string), "%.0f минут и %d секунд"minutesseconds); 

    else if(
    time == 3600string "1 час"
    else if(
    time 3600

    new 
    Floathours
    new 
    minutes_int
    new 
    Floatminutes
    new 
    seconds
    hours time 3600
    minutes_int time 3600
    minutes minutes_int 60
    seconds minutes_int 60
    format(stringsizeof(string), "%.0f:%.0f:%d"hoursminutesseconds); 

    return 
    string


  2. #2
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Вот мой вариант:


    Ко всем new
    PHP код:
    new is_afk[MAX_PLAYERS];
    new 
    afk_time[2][MAX_PLAYERS]; 
    В OnPlayerConnect
    PHP код:
    is_afk[playerid] = 0;
    afk_time[0][playerid] = 0afk_time[1][playerid] = 0
    В AfkSystem

    PHP код:
    if(is_afk[playerid] != 0is_afk[playerid] = 0;
    else {
        
    afk_time[0][playerid]++;
        if(
    afk_time[0][playerid] > 60afk_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(playeridstringCOLOR_WHITE10.070000000);  

    В OnPlayerUpdate

    PHP код:
    is_afk[playerid] = 1
    - - - Добавлено - - -

    Если хочешь такие же функции что и в твоем Convert Seconds, то вот:

    PHP код:
    if(is_afk[playerid] != 0is_afk[playerid] = 0;
    else {
        
    afk_time[0][playerid]++;
        if(
    afk_time[0][playerid] > 60afk_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] <= 0format(string,sizeof(string),"АФК: %d секунд",afk_time[0][playerid]);
        else 
    format(string50"АФК: %02d:%02d"afk_time[1][playerid], afk_time[0][playerid]);
        
    SetPlayerChatBubble(playeridstringCOLOR_WHITE10.070000000);  

    А больше подсчета минут тебе не нужно, ибо ты хочешь кик после 15 минут.
    Последний раз редактировалось wAx; 17.05.2014 в 14:27.

  3. Пользователь сказал cпасибо:
    denis01 (17.05.2014)
  4. #3
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±
    Спасибо, можно еще вопрос,

    В AfkSystem вы говорите так?
    PHP код:
    forward AFKSystem();  
    public 
    AFKSystem() 
    {
       if(
    is_afk[playerid] != 0is_afk[playerid] = 0;
       else 
       {
             
    afk_time[0][playerid]++;
             if(
    afk_time[0][playerid] > 60afk_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(playeridstringCOLOR_WHITE10.070000000);
        }  


  5. #4
    Аватар для Nurick
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±
    PHP код:
    afk_time[0][playerid] = 0afktime[1][playerid] = 0;// тут исправь 
    afk_time[0][playerid] = 0afk_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] != 0is_afk[playerid] = 0;
               else 
               {
                     
    afk_time[0][playerid]++;
                     if(
    afk_time[0][playerid] > 60afk_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(playeridstringCOLOR_WHITE10.070000000);
                }
            }
        }        

    Последний раз редактировалось Nurick; 17.05.2014 в 12:41.

  6. 2 пользователя(ей) сказали cпасибо:
    denis01 (17.05.2014) wAx (17.05.2014)
  7. #5
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±
    При компиляции выходит Варнинг
    warning 209: function "AFKSystem" should return a value

  8. #6
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    PHP код:
    forward AFKSystem();  
    public 
    AFKSystem() 
    {
        for(new 
    playerid;playerid MAX_PLAYERS;playerid++)  
        {  
            if(
    IsPlayerConnected(playerid))  
            { 
               if(
    is_afk[playerid] != 0is_afk[playerid] = 0;
               else 
               {
                     
    afk_time[0][playerid]++;
                     if(
    afk_time[0][playerid] > 60afk_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(playeridstringCOLOR_WHITE10.070000000);
                }
            }
        }        
        return 
    1;


  9. #7
    Аватар для DOS-Protection
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.01.2014
    Сообщений
    30
    Репутация:
    6 ±
    Оптимизаторы от бога.

  10. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Если значение переменной не может быть меньше 0 или больше 255 - можно использовать char, по идее
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  11. #9
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Цитата Сообщение от DOS-Protection Посмотреть сообщение
    Оптимизаторы от бога.
    Ну вот если бы ты предложил свой вариант, твой пост имел бы хоть какой то смысл, а так...

  12. #10
    Аватар для denis01
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.05.2014
    Сообщений
    70
    Репутация:
    0 ±
    Код не рабочий, не показывает то что ты АФК: %02d:%02d

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •