Вывести сообщение в левом верхнем углу

Колян

Участник
Сообщения
180
Реакции
5
Здравствуйте, помните в mani admin plugin была функция рекламы и там она по умолчанию показывалась в левом верхнем углу.. как можно вывести так-же сообщением в SM ?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
как-то так
PHP:
...
CreateTimer(5.0, Countdown, _, TIMER_REPEAT);
...

public Action Countdown(Handle timer)
{
    if(!bTrue) return Plugin_Stop;
    ShowCountdown(%SomeStringValue%);
    return Plugin_Continue;
}

void ShowCountdown(char[] text)
{
    KeyValues kv = new KeyValues("Stuff", "title", text); // текст
    kv.SetColor("color", 255, 127, 0, 255); // цвет текста
    kv.SetNum("level", 1);
    kv.SetNum("time", 10); // время отображения
    for (int i = 1; i <= MaxClients; i++)
    {
        if (!IsClientInGame(i) || IsFakeClient(i)) continue;
        CreateDialog(i, kv, DialogType_Msg);
    }
    delete kv;
}
 

Karmushka

Karma
Сообщения
199
Реакции
30
как-то так
PHP:
...
CreateTimer(5.0, Countdown, _, TIMER_REPEAT);
...

public Action Countdown(Handle timer)
{
    if(!bTrue) return Plugin_Stop;
    ShowCountdown(%SomeStringValue%);
    return Plugin_Continue;
}

void ShowCountdown(char[] text)
{
    KeyValues kv = new KeyValues("Stuff", "title", text); // текст
    kv.SetColor("color", 255, 127, 0, 255); // цвет текста
    kv.SetNum("level", 1);
    kv.SetNum("time", 10); // время отображения
    for (int i = 1; i <= MaxClients; i++)
    {
        if (!IsClientInGame(i) || IsFakeClient(i)) continue;
        CreateDialog(i, kv, DialogType_Msg);
    }
    delete kv;
}
Можно скрин? просто я не понял что за шняга!
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
у меня на сервере я так вывожу отсчёт до конца карты (там выживать на время нужно, а визуальный отсчёт времени автор не сделал)
емнип, текст в том углу можно через команду sm_tsay выводить
 

msl1

Участник
Сообщения
162
Реакции
20
В чем ошибка не компилируется
#pragma semicolon 1

#include <sourcemod>


public OnPluginStart()
{
HookEvent("player_death", Event_PlayerDeath);

}

public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{

CreateTimer(5.0, Countdown, _, TIMER_REPEAT);

}
public Action Countdown(Handle timer)
{
ShowCountdown();
return Plugin_Continue;
}

void ShowCountdown(char[] text)
{
KeyValues kv = new KeyValues("Stuff", "title", text); // текст
kv.SetColor("color", 255, 127, 0, 255); // цвет текста
kv.SetNum("level", 1);
kv.SetNum("time", 10); // время отображения
for (int i = 1; i <= MaxClients; i++)
{
if (!IsClientInGame(i) || IsFakeClient(i)) continue;
CreateDialog(i, kv, DialogType_Msg);
}
delete kv;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@msl1, а не надо мешать синтаксисы для начала
Плюс ты не указал параметр для функции ShowCountdown
И какой текст и кому ты хочешь показывать?
Ещё у тебя твой плагин после нескольких смертей засрёт нагрузкой проц сервера потому что отключение повторяющегося таймера тобой не предусмотрено (м/б тебе нужен был однократный таймер или вообще нужно было сделать без него).

С небольшими исправлениями будет компилиться
PHP:
#pragma semicolon 1

#pragma newdecls required

public void OnPluginStart()
{
    HookEvent("player_death", Event_PlayerDeath);
}

public void Event_PlayerDeath(Handle event, const char[] name, bool dontBroadcast)
{
    CreateTimer(5.0, Countdown, _, TIMER_REPEAT);
}
public Action Countdown(Handle timer)
{
    ShowCountdown("some_text");    // передача текстового параметра
    return Plugin_Continue;                // эта музыка будет вечной, если я сменю батарейки
}

void ShowCountdown(char[] text)
{
    KeyValues kv = new KeyValues("Stuff", "title", text); // текст
    kv.SetColor("color", 255, 127, 0, 255); // цвет текста
    kv.SetNum("level", 1);
    kv.SetNum("time", 10); // время отображения
    for (int i = 1; i <= MaxClients; i++)    // показ текста всем игрокам на сервере
    {
        if (!IsClientInGame(i) || IsFakeClient(i)) continue;
        CreateDialog(i, kv, DialogType_Msg);
    }
    delete kv;
}
Но юзать скомпиленое не советую по указанной выше причине
 

msl1

Участник
Сообщения
162
Реакции
20
@msl1, а не надо мешать синтаксисы для начала
Плюс ты не указал параметр для функции ShowCountdown
И какой текст и кому ты хочешь показывать?
Ещё у тебя твой плагин после нескольких смертей засрёт нагрузкой проц сервера потому что отключение повторяющегося таймера тобой не предусмотрено (м/б тебе нужен был однократный таймер или вообще нужно было сделать без него).

С небольшими исправлениями будет компилиться
PHP:
#pragma semicolon 1

#pragma newdecls required

public void OnPluginStart()
{
    HookEvent("player_death", Event_PlayerDeath);
}

public void Event_PlayerDeath(Handle event, const char[] name, bool dontBroadcast)
{
    CreateTimer(5.0, Countdown, _, TIMER_REPEAT);
}
public Action Countdown(Handle timer)
{
    ShowCountdown("some_text");    // передача текстового параметра
    return Plugin_Continue;                // эта музыка будет вечной, если я сменю батарейки
}

void ShowCountdown(char[] text)
{
    KeyValues kv = new KeyValues("Stuff", "title", text); // текст
    kv.SetColor("color", 255, 127, 0, 255); // цвет текста
    kv.SetNum("level", 1);
    kv.SetNum("time", 10); // время отображения
    for (int i = 1; i <= MaxClients; i++)    // показ текста всем игрокам на сервере
    {
        if (!IsClientInGame(i) || IsFakeClient(i)) continue;
        CreateDialog(i, kv, DialogType_Msg);
    }
    delete kv;
}
Но юзать скомпиленое не советую по указанной выше причине
Покажи как сделать без таймера , показ только убитым игрокам .
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@msl1, примерно так:
PHP:
#pragma semicolon 1

#pragma newdecls required

public void OnPluginStart()
{
    HookEvent("player_death", Event_PlayerDeath);
}

public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
// если текст должен создаваться каждый раз другой:
    char some_text[24];        // создаём текстовую переменную
    Format(some_text, sizeof(some_text), "AttackerID: %i", event.GetInt("attacker"));    // формируем текст
    ShowCountdown(some_text, event.GetInt("userid"));    // передача текстового параметра функции вывода

// если текст должен создаваться каждый раз один и тот же:
    ShowCountdown("some_text", event.GetInt("userid"));    // передача текстового параметра функции вывода
}

void ShowCountdown(const char[] text, const int userID)
{
    int client = GetClientOfUserId(userID);
    if(!client || IsFakeClient(client)) return;

    KeyValues kv = new KeyValues("Stuff", "title", text); // текст
    kv.SetColor("color", 0, 127, 255, 255); // цвет текста
    kv.SetNum("level", 1);
    kv.SetNum("time", 10); // время отображения
    CreateDialog(client, kv, DialogType_Msg);
    delete kv;
}
 
  • Мне нравится
Реакции: msl1

msl1

Участник
Сообщения
162
Реакции
20
@msl1, примерно так:
PHP:
#pragma semicolon 1

#pragma newdecls required

public void OnPluginStart()
{
    HookEvent("player_death", Event_PlayerDeath);
}

public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
// если текст должен создаваться каждый раз другой:
    char some_text[24];        // создаём текстовую переменную
    Format(some_text, sizeof(some_text), "AttackerID: %i", event.GetInt("attacker"));    // формируем текст
    ShowCountdown(some_text, event.GetInt("userid"));    // передача текстового параметра функции вывода

// если текст должен создаваться каждый раз один и тот же:
    ShowCountdown("some_text", event.GetInt("userid"));    // передача текстового параметра функции вывода
}

void ShowCountdown(const char[] text, const int userID)
{
    int client = GetClientOfUserId(userID);
    if(!client || IsFakeClient(client)) return;

    KeyValues kv = new KeyValues("Stuff", "title", text); // текст
    kv.SetColor("color", 0, 127, 255, 255); // цвет текста
    kv.SetNum("level", 1);
    kv.SetNum("time", 10); // время отображения
    CreateDialog(client, kv, DialogType_Msg);
    delete kv;
}
Спасибо .
 
Сверху Снизу