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

    Статус
    Оффлайн
    Регистрация
    06.11.2015
    Сообщений
    41
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    4,353
    Репутация:
    1633 ±
    Цитата Сообщение от 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 после авторизации или выхода
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,466
    Репутация:
    265 ±
    Дуймсос, а Вы мазохист инициализировать переменную при каждом такте таймера.

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

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

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

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    197
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    4,353
    Репутация:
    1633 ±
    Цитата Сообщение от Prolific Посмотреть сообщение
    Что за мода пошла поднимать темы 13 года и вместо наглядной конструкции forward,public использовать @.
    Я использую "@" как показатель того, что функция вызывается таймером. Это гораздо нагляднее, чем пытаться указывать в имени функции её отношение к таймеру.
    Да и некропостинг на форуме не запрещён, как я знаю. Появился у человека вопрос и он его задал в уже существующей теме, а не создал новую. Вполне правильное решение, как по мне
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Дуймсос, а Вы мазохист инициализировать переменную при каждом такте таймера.
    Больших проблем подобное действо не вызовет. Таймер всего секундный, создаётся только при подключении игрока к серверу и инициализируется всего 3 ячейки. А вот ради какого-то действия, которое будет срабатывать раз в 10 лет, забивать кучу - вот это действительно мазохизм.
    На досуге открой мод Аризоны, который слили на днях, и узри, какой код способен держать большой онлайн без каких-либо серьёзных проблем.
    Последний раз редактировалось DeimoS; 26.04.2016 в 15:18.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  12. #30
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,786
    Репутация:
    2277 ±
    Цитата Сообщение от 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, всё будет очень печально.

    Пока что перемещу тему обратно в раздел "Добавить мануал".
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

 

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

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

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

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

Ваши права

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