Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 3 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 21 по 30 из 37
  1. #21
    Аватар для SliM
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.11.2015
    Сообщений
    40
    Репутация:
    10 ±
    PHP код:
    OnPlayerConnect (playerid)
    {
        
    SetTimerEx ("PlayerEnterPassword"01000"ii"playerid60);//60 = 1 min
    }
    OnPlayerLogin (playerid)
    {
        
    SetPvarInt (playerid"enter_password"true);
    }
    PlayerEnterPassword (playeridtime)
    {
        if (
    GetPvarInt (playerid"enter_password"))
        {
            
    DeletePVar (playerid"enter_password");
            
    GameTextForPlayer (playerid"~g~password ok"30004);
            return 
    1;
        }
        if (!
    time)
        {
            
    SendClientMessage (playerid, -1"слишком медленно");
            
    Kick (playerid);
            return 
    1;
        }
        
    SetTimerEx ("PlayerEnterPassword"01000"ii"playerid, -- time);
        new
            
    show_time [18]
        ;
        
    format (show_timesizeof show_time"Time to Kick: %i"time);
        
    GameTextForPlayer (playeridshow_time10004);

    псевдокод

  2. #22
    Аватар для Coopr
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.04.2016
    Сообщений
    18
    Репутация:
    0 ±
    PHP код:
    new
        
    player_kick_time[MAX_PLAYERS char]; 
    В OnPlayerConnect:
    PHP код:
    player_kick_time{playerid} = 30// Отсчёт на 30 секунд 
    Думаю у каждого есть односекундный глобальный таймер, если нет, то создадим его.

    В OnGameModeInit:
    PHP код:
    SetTimer("@__login_timer"10001); // Глобальный таймер на 1 секунду 
    Далее создадим паблик (если у вас есть односекундный паблик, то его создавать не нужно):
    PHP код:
    @__login_timer();
    @
    __login_timer()
    {
        new
            
    GetMaxPlayers();

        do
        {
            --
    i;
            if(
    IsPlayerConnected(i) && player_kick_time{i} != && --player_kick_time{i} == 0)
            {
                
    SendClientMessage(i, -1"Время на регистрацию / авторизацию закончилось, вы кикнуты");
                
    Kick(i);
            }
        }
        while(
    i);

    И после того как игрок вошёл в аккаунт / зарегистрировался:
    PHP код:
    player_kick_time{playerid} = 0
    PHP код:
    @____TimeForAuthorization(playeridtime);
    @
    ____TimeForAuthorization(playeridtime)
    {
        new 
    string[3];
        
    format(stringsizeof(string), "%d"time);
        
    SendClientMessage(playerid, -1string);
        if(
    time 0SetTimerEx("@____TimeForAuthorization"10000"ii"playeridtime-1);
        else
        {
            
    SendCLientMessage(playerid. -1. "Время вышло");
        }
        return 
    1;

    У меня код будет выглядить так??

  3. #23
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Coopr Посмотреть сообщение
    PHP код:
    new
        
    player_kick_time[MAX_PLAYERS char]; 
    В OnPlayerConnect:
    PHP код:
    player_kick_time{playerid} = 30// Отсчёт на 30 секунд 
    Думаю у каждого есть односекундный глобальный таймер, если нет, то создадим его.

    В OnGameModeInit:
    PHP код:
    SetTimer("@__login_timer"10001); // Глобальный таймер на 1 секунду 
    Далее создадим паблик (если у вас есть односекундный паблик, то его создавать не нужно):
    PHP код:
    @__login_timer();
    @
    __login_timer()
    {
        new
            
    GetMaxPlayers();

        do
        {
            --
    i;
            if(
    IsPlayerConnected(i) && player_kick_time{i} != && --player_kick_time{i} == 0)
            {
                
    SendClientMessage(i, -1"Время на регистрацию / авторизацию закончилось, вы кикнуты");
                
    Kick(i);
            }
        }
        while(
    i);

    И после того как игрок вошёл в аккаунт / зарегистрировался:
    PHP код:
    player_kick_time{playerid} = 0
    PHP код:
    @____TimeForAuthorization(playeridtime);
    @
    ____TimeForAuthorization(playeridtime)
    {
        new 
    string[3];
        
    format(stringsizeof(string), "%d"time);
        
    SendClientMessage(playerid, -1string);
        if(
    time 0SetTimerEx("@____TimeForAuthorization"10000"ii"playeridtime-1);
        else
        {
            
    SendCLientMessage(playerid. -1. "Время вышло");
        }
        return 
    1;

    У меня код будет выглядить так??
    Зачем массив? Тем более если ты используешь мой первый метод...
    Я уже дал же готовый код для обоих случаев. Не нужно ничего додумывать там. Просто добавь удаление таймера/pVar после авторизации или выхода
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  4. Пользователь сказал cпасибо:
    Coopr (25.04.2016)
  5. #24
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Дуймсос, а Вы мазохист инициализировать переменную при каждом такте таймера.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  6. #25
    Аватар для Prolific
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.12.2013
    Сообщений
    116
    Репутация:
    14 ±
    Что за мода пошла поднимать темы 13 года и вместо наглядной конструкции forward,public использовать @.

  7. #26
    Аватар для Profyan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от Prolific Посмотреть сообщение
    Что за мода пошла поднимать темы 13 года и вместо наглядной конструкции forward,public использовать @.
    Про @: видимо скриптеры получают от этого какой-то кайф,думая,что открыли неизведанные возможности.



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




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

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±
    Цитата Сообщение от Profyan Посмотреть сообщение
    Про @: видимо скриптеры получают от этого какой-то кайф,думая,что открыли неизведанные возможности.
    Каждый сам выбирает как будет состоять строение кода его, это же не влияет на работу кода!

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

    Статус
    Оффлайн
    Регистрация
    19.04.2014
    Адрес
    Уфа, Россия
    Сообщений
    319
    Репутация:
    52 ±
    По теме:
    Я думаю лучше будет использовать тут TextDrawSetString и совместить это с предложенным вариантом "DeimoS"

    PHP код:
    forward SecondTimer(); 
    PHP код:
    new Text:time_limit[2]; 
    PHP код:
    SetTimer("SecondTimer"10001); 
    PHP код:
    public SecondTimer()
    {
        for(new 
    0MAX_PLAYERSi++)
        {
            if(
    GetPVarInt(i"time_limit_for_authorization"))
            {
                
    SetPVarInt(i"time_limit_for_authorization"GetPVarInt(i"time_limit_for_authorization") - 1);
                if(
    GetPVarInt(i"time_limit_for_authorization") - == 1)
                {
                    
    SendClientMessage(i, -1"Время на авторизацию истекло");
                    
    SendClientMessage(i0xFFCC00FF"Введите \"/q\" (/quit) для выхода");
                    
    TextDrawHideForPlayer(itime_limit[0]);
                    
    TextDrawHideForPlayer(itime_limit[1]);
                    
    DeletePVar(i"time_limit_for_authorization");
                    
    _DelayedKick(i);
                }
                else
                {
                    new 
    string[9];
                    
    format(stringsizeof(string), "Kick: %d"GetPVarInt(i"time_limit_for_authorization") - 1);
                      
    TextDrawSetString(time_limit[1], string);
                    
    TextDrawShowForPlayer(itime_limit[0]);
                    
    TextDrawShowForPlayer(itime_limit[1]);
                }
            }
        }

    Когда игрок авторизуется:
    PHP код:
    SetPVarInt(playerid"time_limit_for_authorization"31); 
    Вошел/авторизовался:
    PHP код:
        DeletePVar(playerid"time_limit_for_authorization");
        
    TextDrawHideForPlayer(playeridtime_limit[0]);
        
    TextDrawHideForPlayer(playeridtime_limit[1]); 
    PHP код:
        time_limit[0] = TextDrawCreate(153.250000209.166656"_");
        
    TextDrawLetterSize(time_limit[0], 0.0000002.924074);
        
    TextDrawTextSize(time_limit[0], 38.6250000.000000);
        
    TextDrawUseBox(time_limit[0], 1);
        
    TextDrawBoxColor(time_limit[0], -4259744);
        
    time_limit[1] = TextDrawCreate(56.875000213.500000"_");
        
    TextDrawLetterSize(time_limit[1], 0.4499991.600000);
        
    TextDrawSetShadow(time_limit[1], 1);
        
    TextDrawFont(time_limit[1], 2);
        
    TextDrawColor(time_limit[1], -1992342160); 
     Скриншот:


    И оповещение перед киком игрока:
    PHP код:
    forward DelayedKick(playerid); 
    PHP код:
    _DelayedKick(playeridtime 500)
    {
        
    SetTimerEx("DelayedKick"timefalse"i"playerid);
        return 
    1;

    PHP код:
    public DelayedKick(playerid)
    {
        
    Kick(playerid);
        return 
    1;

    Последний раз редактировалось Nurick; 26.04.2016 в 15:01.

  10. Пользователь сказал cпасибо:
    Coopr (28.04.2016)
  11. #29
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Prolific Посмотреть сообщение
    Что за мода пошла поднимать темы 13 года и вместо наглядной конструкции forward,public использовать @.
    Я использую "@" как показатель того, что функция вызывается таймером. Это гораздо нагляднее, чем пытаться указывать в имени функции её отношение к таймеру.
    Да и некропостинг на форуме не запрещён, как я знаю. Появился у человека вопрос и он его задал в уже существующей теме, а не создал новую. Вполне правильное решение, как по мне
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Дуймсос, а Вы мазохист инициализировать переменную при каждом такте таймера.
    Больших проблем подобное действо не вызовет. Таймер всего секундный, создаётся только при подключении игрока к серверу и инициализируется всего 3 ячейки. А вот ради какого-то действия, которое будет срабатывать раз в 10 лет, забивать кучу - вот это действительно мазохизм.
    На досуге открой мод Аризоны, который слили на днях, и узри, какой код способен держать большой онлайн без каких-либо серьёзных проблем.
    Последний раз редактировалось DeimoS; 26.04.2016 в 15:18.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  12. #30
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    PHP код:
    @__login_timer();
    @
    __login_timer()
    {
        new
            
    GetMaxPlayers();

        do
        {
            --
    i;
            if(
    IsPlayerConnected(i) && player_kick_time{i} != && --player_kick_time{i} == 0)
            {
                
    SendClientMessage(i, -1"Время на регистрацию / авторизацию закончилось, вы кикнуты");
                
    Kick(i);
            }
        }
        while(
    i);

    Если GetMaxPlayers вернёт 0, всё будет очень печально.

    Пока что перемещу тему обратно в раздел "Добавить мануал".
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

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

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

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

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

Ваши права

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