Вывод сообщения в TOP (левый верхний угол)

Тема в разделе "Программирование / Скриптинг", создана пользователем EPacker2, 22 сен 2013.

  1. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.025
    Симпатии:
    625
    Хочу сделать плагин выводящий время в TOP
    Примерная часть кода:
    PHP:
    public OnClientAuthorized(client, const String:auth[])
    {
        if(
    client && IsClientInGame(client) && !IsFakeClient(client))
        {
            new 
    time GetTime()
            new 
    String:nowtime[256]
            
    FormatTime(nowtimesizeof(nowtime), "%H:%M:%S"time)
            
    PrintTopToAll(color"Время: %s"nowtime); //не знаю какую команду вставить
        
    }
    }
    Помогите сделать как положено :)
     
  2. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    EPacker2, там не так просто.

    PHP:
        new String:message[100];
        
    VFormat(messagesizeof(message), text4);    
        
        new 
    Handle:kv CreateKeyValues("Stuff""title"message);
        
    KvSetColor(kv"color"g_Colors[color][0], g_Colors[color][1], g_Colors[color][2], 255);
        
    KvSetNum(kv"level"1);
        
    KvSetNum(kv"time"10);
        
        
    CreateDialog(clientkvDialogType_Msg);
        
        
    CloseHandle(kv);
    как то так, но это для одного клиента. Нужно или изменить на всех, или циклом
     
    EPacker2 и KonveeR нравится это.
  3. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.025
    Симпатии:
    625
    Видел это в SmTSay
     
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    EPacker2, это и есть оттуда. Еще можешь в knifefight глянуть
     
    EPacker2 и KonveeR нравится это.
  5. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.025
    Симпатии:
    625
    Проверил через Advertisements. В топе не получится ежесекундно обновлять.
    Жаль что чат, центр, и HUD уже заняты.
     
  6. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    Чего не получится ?
    KvSetNum(kv, "time", 1);
     
    EPacker2 и KonveeR нравится это.
  7. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.025
    Симпатии:
    625
    Кто-нибудь аукнется мне на помощь? :)
     
  8. vanbka9

    vanbka9

    Сообщения:
    14
    Симпатии:
    13
    Ты пробовал??? У меня не получается...

    :)Вот держи, сделал принт во все области, только обновлять каждую секунду в топе не получается...:dntknw: Обновляется раз в 10 сек.:mda:
    Ненужное думаю уберешь сам
    PHP:
    #pragma semicolon 1

    new Handle:TOP INVALID_HANDLE;
    new 
    c_red 75
        
    c_green 75
        
    c_blue 255
        
    c_alpha 255;
    new 
    String:Msg[24];

    public 
    OnPluginStart()
    {
        
    StartTimer();
        
    TOP CreateKeyValues("TOP");
        
    KvSetNum(TOP"level"0);
        
    KvSetNum(TOP"time"10);
    }

    stock StartTimer()
        
    CreateTimer(1.0Timer_CallBack_TIMER_REPEAT);

    public 
    Action:Timer_CallBack(Handle:timer)
    {
        
    decl String:time[9];
        
    // http://www.cplusplus.com/reference/ctime/strftime/
        
    FormatTime(timesizeof(time), "%X");
        
    Format(Msgsizeof(Msg), "TIME => %s"time);
        
    // Принт в ТОП
        
    PrintToTopAll(c_redc_greenc_bluec_alphaMsg);
        
    // Принт в панель
        
    PrintToPanelAll(Msg);
        
    // Принт в чат
        
    PrintToChatAll(Msg);
        
    // Принт в центре
        
    PrintCenterTextAll(Msg);
        
    // Принт справа
        
    PrintKeyHintTextToAll(Msg);
        
    // Принт внизу
        
    PrintHintTextToAll(Msg);
        return 
    Plugin_Continue;
    }

    PrintToTopAll(rgba, const String:g_Msg[], any:...)
    {
        
    decl String:Buffer[56];
        
    VFormat(Buffersizeof(Buffer), g_Msg6);
        if(
    TOP != INVALID_HANDLE)
        {
            
    KvSetString(TOP"title"Buffer);
            
    KvSetColor(TOP"color"rgba);
            for(new 
    1<= MaxClientsi++)
                if(
    IsClientInGame(i))
                    
    CreateDialog(iTOPDialogType_Msg);
        }
    }

    PrintToPanelAll(const String:g_Msg[])
    {
        new 
    Handle:panel CreatePanel(); 
        
    SetPanelTitle(panelg_Msg);
        for (new 
    1MaxClientsi++)
            if(
    IsClientInGame(i))
                
    SendPanelToClient(paneliFunc_Panel0);
    }

    public 
    Func_Panel(Handle:panelMenuAction:actionclientoption
    {
    }

    PrintKeyHintTextToAll(const String:g_Msg[])
    {
        new 
    Handle:Message StartMessageAll("KeyHintText");
        if (
    Message != INVALID_HANDLE)
        {
            
    BfWriteByte(Message1);
            
    BfWriteString(Messageg_Msg);
            
    EndMessage();
        }
    }
     
    Последнее редактирование: 30 сен 2013
    EPacker2 нравится это.
  9. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    EPacker2, Собственно на что откликаться, вроде все уже обсудили с рико?
     
  10. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.025
    Симпатии:
    625
    У меня тоже.
    Спасибо за код, вечером попробую на работо-способность. :)
     
  11. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.994
    Симпатии:
    2.990
    че у вас тут не выходит? Надо будет попробывать

    Добавлено через 4 часа 42 минуты
    нашел вам ответ. Хотя не уверен
    PHP:
    SendDialogToOne(clientcolor[3], timeString:text[], any:...)
    {
        new 
    String:message[100];
        
    VFormat(messagesizeof(message), text5); 

        new 
    Handle:kv CreateKeyValues("Stuff""title"message);
        
    KvSetColor(kv"color"color[0], color[1], color[2], 255);
        
    KvSetNum(kv"level"1);
        
    KvSetNum(kv"time"time);

        
    CreateDialog(clientkvDialogType_Msg);

        
    CloseHandle(kv); 
    }
     
    Последнее редактирование: 30 сен 2013
    EPacker2 нравится это.
  12. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.025
    Симпатии:
    625
    vanbka9, поправь пожалуйста, как правильно сделать..
    PHP:
    #pragma semicolon 1

    new Handle:TOP INVALID_HANDLE;
    new 
    String:Msg[24];

    public 
    OnPluginStart()
    {
        
    StartTimer();
        
    TOP CreateKeyValues("TOP");
    }

    stock StartTimer()
        
    CreateTimer(1.0Timer_CallBack_TIMER_REPEAT);

    public 
    Action:Timer_CallBack(Handle:timer)
    {
        
    decl String:time[9];
        
    FormatTime(timesizeof(time), "%d.%m.%Y - %H:%M");
        
    Format(Msgsizeof(Msg), "%s"time);

        
    PrintToTopAll(Msg);
    }

    PrintToTopAll(const String:g_Msg[], any:...)
    {
        
    decl String:Buffer[56];
        
    VFormat(Buffersizeof(Buffer), g_Msg6);
        if(
    TOP != INVALID_HANDLE)
        {
            
    KvSetString(TOP"title"Buffer);
            
    KvSetNum(TOP"level"1);
            
    KvSetNum(TOP"time"10);
            
    KvSetColor(TOP"color"2552550);

            for(new 
    1<= MaxClientsi++)
                if(
    IsClientInGame(i))
                    
    CreateDialog(iTOPDialogType_Msg);
        }
    }
    А то выдает такую ошибку:
    Код:
    L 10/02/2013 - 05:43:13: [SM] Native "FormatTime" reported: Invalid time format or buffer too small
    L 10/02/2013 - 05:43:13: [SM] Displaying call stack trace for plugin "time.smx":
    L 10/02/2013 - 05:43:13: [SM]   [0]  Line 18, time.sp::Timer_CallBack()
     
  13. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    девятку до 48 как минимум
     
  14. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.025
    Симпатии:
    625
    Теперь выдает эту ошибку:
    Код:
    L 10/02/2013 - 23:11:01: [SM] Native "VFormat" reported: Argument index is invalid: 6
    L 10/02/2013 - 23:11:01: [SM] Displaying call stack trace for plugin "time.smx":
    L 10/02/2013 - 23:11:01: [SM]   [0]  Line 27, time.sp::PrintToTopAll()
    L 10/02/2013 - 23:11:01: [SM]   [1]  Line 21, time.sp::Timer_CallBack()
     
  15. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.565
    Симпатии:
    1.150
    EPacker2, так сделай
    PHP:
    #pragma semicolon 1

    new Handle:TOP INVALID_HANDLE,
        
    Handle:g_hTimer;
    new 
    String:Msg[56];

    public 
    OnPluginStart()
        
    TOP CreateKeyValues("TOP");

    public 
    OnMapStart()
        
    StartTimer();

    public 
    OnMapEnd()
    {
        if (
    g_hTimer != INVALID_HANDLE)
        {
            
    KillTimer(g_hTimer);
        }
    }    

    stock StartTimer()
        
    g_hTimer CreateTimer(5.0Timer_CallBack_TIMER_REPEAT);

    public 
    Action:Timer_CallBack(Handle:timer)
    {
        
    decl String:time[56];
        
    FormatTime(timesizeof(time), "%d.%m.%Y - %H:%M");
        
    Format(Msgsizeof(Msg), "%s"time);

        
    PrintToTopAll(Msg);
    }

    PrintToTopAll(const String:g_Msg[])
    {
        
    decl String:Buffer[56];
        
    Format(Buffersizeof(Buffer), g_Msg);
        if(
    TOP != INVALID_HANDLE)
        {
            
    KvSetString(TOP"title"Buffer);
            
    KvSetNum(TOP"level"1);
            
    KvSetNum(TOP"time"5);
            
    KvSetColor(TOP"color"7575255255);

            for(new 
    1<= MaxClientsi++)
                if(
    IsClientInGame(i))
                    
    CreateDialog(iTOPDialogType_Msg);
        }
    }
    Не знаю зачем делать через "VFormat" если пашет норм при "Format". И зачем делать таймер на каждую секунду, сделал 5 секунд сообщение и таймер, вроде пашет как надо и меньше нагрузка таймерами.
     
    Последнее редактирование: 3 окт 2013
    EPacker2 и R1KO нравится это.
  16. EPacker2

    EPacker2 3D-моделист

    Сообщения:
    1.025
    Симпатии:
    625
    Серый™, спасибо, все шикарно работает. :beer:
    [​IMG]

    Тему можно закрыть.
     
    Последнее редактирование: 4 окт 2013