Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 11 по 20 из 37
  1. #11
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Цитата Сообщение от Valera_Trefilov Посмотреть сообщение
    Я бы сделал так:

    PHP код:
    public OnPlayerConnect(playerid)
    {
        
    SetPVarInt(playerid,"Loginned",1);
        
    SetTimerEx("LoginnedTimer"600000"i"playerid);
        return 
    true;


    PHP код:
    forward LoginnedTimer(i);
    public 
    LoginnedTimer(i)
    {
        if(
    GetPVarInt(i,"Loginned")==1)
            
    Kick(i);
        return 
    true;

    это туда где вы авторизуетесь:
    PHP код:
    if(GetPVarInt(playerid,"Loginned")==1DeletePVar(playerid,"Loginned"); 
    А если я зайду, увижу окно авторизации, продержусь 50 секунд, выйду и следом зайдет игрок под моим ID

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

    Статус
    Оффлайн
    Регистрация
    10.12.2013
    Сообщений
    35
    Репутация:
    7 ±
    Цитата Сообщение от wAx Посмотреть сообщение
    А если я зайду, увижу окно авторизации, продержусь 50 секунд, выйду и следом зайдет игрок под моим ID
    Не будет такого. Запуск таймера в коннекте.

    Разве что можно делать так:

    PHP код:
    public OnPlayerConnect(playerid)
    {
        
    SetPVarInt(playerid,"Loginned",SetTimerEx("LoginnedTimer"600000"i"playerid));
        return 
    true;

    PHP код:
    public OnPlayerDisconnect(playerid,reason)
    {
        if(
    GetPVarInt(playerid,"Loginned")!=0)
            
    KillTimer(GetPVarInt(playerid,"Loginned"));
        return 
    true;

    PHP код:
    forward LoginnedTimer(i);
    public 
    LoginnedTimer(i)
    {
        if(
    GetPVarInt(i,"Loginned")!=0)
            
    Kick(i);
        return 
    true;

    это туда где вы авторизуетесь:

    PHP код:
    if(GetPVarInt(playerid,"Loginned")!=0DeletePVar(playerid,"Loginned"); 
    исправил в общем
    Последний раз редактировалось Valera_Trefilov; 09.04.2015 в 21:52.

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

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Не будет такого. Запуск таймера в коннекте.
    Это и являлось причиной ошибки.

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Много кто предлагал делать, но: Зачем создавать для каждого игрока таймер? Если можно проверять каждого игрока в цикле, что более надёжнее, нежели проверять определённого.

  5. #15
    Аватар для Maranzalla
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Адрес
    Moscow
    Сообщений
    108
    Репутация:
    -1 ±
    Цитата Сообщение от Valera_Trefilov Посмотреть сообщение
    Я бы сделал так:

    PHP код:
    public OnPlayerConnect(playerid)
    {
        
    SetPVarInt(playerid,"Loginned",1);
        
    SetTimerEx("LoginnedTimer"600000"i"playerid);
        return 
    true;


    PHP код:
    forward LoginnedTimer(i);
    public 
    LoginnedTimer(i)
    {
        if(
    GetPVarInt(i,"Loginned")==1)
            
    Kick(i);
        return 
    true;

    это туда где вы авторизуетесь:
    PHP код:
    if(GetPVarInt(playerid,"Loginned")==1DeletePVar(playerid,"Loginned"); 
    да этот вариант лучше

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

    Статус
    Оффлайн
    Регистрация
    15.04.2016
    Сообщений
    18
    Репутация:
    0 ±
    Извини никто не скажет как добавить чтобы в чат писалось время это. К примеру:
    Оставшее время на авторизацию : 30(--30-29-28-27-26-25-24-23-22-21-20.....)
    С убыванием на -1 и как ноль то Кик
    Последний раз редактировалось Coopr; 24.04.2016 в 22:53.

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

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Цитата Сообщение от Coopr Посмотреть сообщение
    Извини никто не скажет как добавить чтобы в чат писалось время это. К примеру:
    Оставшее время на авторизацию : 30(--30-29-28-27-26-25-24-23-22-21-20.....)
    С убыванием на -1 и как ноль то Кик
    выводить в чат каждую секунду время оставшееся на авторизацию - бредовая затея, не думаю что игрокам понравится. Но если все таки хочешь, то создаешь переменную, равную общему времени на авторизацию и в секундном таймере вычитаешь по 1 секунде, обновляешь данные и выводишь игроку в чат.

  8. Пользователь сказал cпасибо:
    Coopr (25.04.2016)
  9. #18
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от wAx Посмотреть сообщение
    выводить в чат каждую секунду время оставшееся на авторизацию - бредовая затея, не думаю что игрокам понравится. Но если все таки хочешь, то создаешь переменную, равную общему времени на авторизацию и в секундном таймере вычитаешь по 1 секунде, обновляешь данные и выводишь игроку в чат.
    Ну или без переменной:
    PHP код:
    SetTimerEx("@____TimeForAuthorization"10000"ii"playerid30); 
    PHP код:
    @____TimeForAuthorization(playeridtime);
    @
    ____TimeForAuthorization(playeridtime)
    {
        new 
    string[...];
        
    format(...);
        
    SendClientMessage(playerid, -1string);
        if(
    time 0SetTimerEx("@____TimeForAuthorization"10000"ii"playeridtime-1);
        else
        {
            
    SendCLientMessage(playerid. -1. "Время вышло");
        }
        return 
    1;

    Я не говорю, что этот вариант лучше или оптимизированнее - я не тестировал. Просто ещё один вариант реализации, который мне пришёл на ум
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  10. Пользователь сказал cпасибо:
    Coopr (25.04.2016)
  11. #19
    Аватар для Coopr
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.04.2016
    Сообщений
    18
    Репутация:
    0 ±
    PHP код:
    new string[30];
    format(stringsizeof(string), "%d", --string); 
    Так??


    - - - Добавлено - - -

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну или без переменной:
    PHP код:
    SetTimerEx("@____TimeForAuthorization"10000"ii"playerid30); 
    PHP код:
    @____TimeForAuthorization(playeridtime);
    @
    ____TimeForAuthorization(playeridtime)
    {
        new 
    string[...];
        
    format(...);
        
    SendClientMessage(playerid, -1string);
        if(
    time 0SetTimerEx("@____TimeForAuthorization"10000"ii"playeridtime-1);
        else
        {
            
    SendCLientMessage(playerid. -1. "Время вышло");
        }
        return 
    1;

    Я не говорю, что этот вариант лучше или оптимизированнее - я не тестировал. Просто ещё один вариант реализации, который мне пришёл на ум
    Получается к все этому мне надо сделать еще так???

  12. #20
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Coopr Посмотреть сообщение
    PHP код:
    new string[30];
    format(stringsizeof(string), "%d", --string); 
    Так??
    Нет :D Если брать мою реализацию, то так:
    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;

    Если брать реализацию wAx, то можно при начале авторизации присвоить к pVar значение, например:
    PHP код:
    SetPVarInt(playerid"TimeForAuthorization"31); 
    И потом в секундный таймер вставить код, типа:
    PHP код:
    if(GetPVarInt(playerid"TimeForAuthorization"))
    {
        new 
    authorization_time GetPVarInt(playerid"TimeForAuthorization")-1;

        
    SetPVarInt(playerid"TimeForAuthorization"authorization_time);
        if(
    authorization_time == 1)
        {
            
    SendClientMessage(playerid, -1"Время вышло");
            
    DeletePVar(playerid"TimeForAuthorization");
        }
        else
        {
            new 
    string[3];
            
    format(stringsizeof(string), "%d"authorization_time-1);
            
    SendClientMessage(playerid, -1string);
        }

    Только playerid на переменную цикла заменить нужно
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  13. Пользователь сказал cпасибо:
    Coopr (25.04.2016)
 

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

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

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

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

Ваши права

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