Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 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
    Сообщений
    375
    Репутация:
    144 ±
    Вот мой вариант:


    Ко всем 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
    Адрес
    Уфа, Россия
    Сообщений
    313
    Репутация:
    51 ±
    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
    Сообщений
    375
    Репутация:
    144 ±
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Если значение переменной не может быть меньше 0 или больше 255 - можно использовать char, по идее
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

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

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

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

 

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

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

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

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

Ваши права

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