зачем козлу барабан

lolovo

Участник
Сообщения
17
Реакции
1
Доброй ночи дорогие форумчане.
Стукнуло что-то в голову - решил научиться писать плагины на SourcePawn.


Сразу возникли вопросы и проблемы.
PHP:
#include <sourcemod>

public Plugin:myinfo =
{
    name = "Мой первый плагин",
    author = "Я",
    description = "Мой первый супер плагин",
    version = "1.0.0.0",
    url = "http://www.sourcemod.net/"
}

public OnPluginStart()
{
    RegAdminCmd("sm_lol", Command_lol, ADMFLAG_SLAY)
}

public Action:Command_lol(client, args)
{
    new String:arg1[32]

    GetCmdArg(1, arg1, sizeof(arg1))

    new target = FindTarget(client, arg1)
    if (target == -1)
    {
        return Plugin_Handled;
    }

    new String:name1[MAX_NAME_LENGTH]
    new String:name2[MAX_NAME_LENGTH]

    GetClientName(target, name1, sizeof(name1))
    GetClientName(client, name2, sizeof(name2))
    ReplyToCommand(client, "[SM] вызвал >> %s ; получил >> %s", name2, name1)

    return Plugin_Handled;
}
Проблема в данной строке:
ReplyToCommand(client, "[SM] вызвал >> %s ; получил >> %s", name2, name1)
Если первым аргументом передавать "client", то всё ок - сообщение получает тот, кто вызвал функцию.
Но если поставить "target", то сообщение игроку приходит только если он сам же и вызвал данную функцию.
Если же прописать в консоле "sm_lol nick", то игрок с ником nick сообщение не получит. Да и вообще его никто не получит.

Функция "GetClientName" по "client" и "target" возвращает правильные ники "name1" и "name2", следовательно, target имеет правильно значение для применения его в "ReplyToCommand", но сообщение игроку "target" не отправляется.

Прошу помочь разобраться :3
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
PHP:
#include <sourcemod>

public Plugin:myinfo =
{
    name = "Мой первый плагин",
    author = "Я",
    description = "Мой первый супер плагин",
    version = "1.0.0.0",
    url = "http://www.sourcemod.net/"
}

public OnPluginStart()
{
    RegAdminCmd("sm_lol", Command_lol, ADMFLAG_SLAY);
}

public Action:Command_lol(client, args)
{
    if (args < 1)
    {
        ReplyToCommand(client, "sm_lol <name>");
        return Plugin_Handled;
    }

    new String:arg1[32];

    GetCmdArg(1, arg1, sizeof(arg1));

    new target = FindTarget(client, arg1);
    if (target == -1)
    {
        return Plugin_Handled;
    }

    PrintToChat(client, "[SM] вызвал >> %N ; получил >> %N", client, target);
    PrintToChat(target, "[SM] вызвал >> %N ; получил >> %N", client, target);

    return Plugin_Handled;
}
 

lolovo

Участник
Сообщения
17
Реакции
1
PHP:
#include <sourcemod>

public Plugin:myinfo =
{
    name = "Мой первый плагин",
    author = "Я",
    description = "Мой первый супер плагин",
    version = "1.0.0.0",
    url = "http://www.sourcemod.net/"
}

public OnPluginStart()
{
    RegAdminCmd("sm_lol", Command_lol, ADMFLAG_SLAY);
}

public Action:Command_lol(client, args)
{
    if (args < 1)
    {
        ReplyToCommand(client, "sm_lol <name>");
        return Plugin_Handled;
    }

    new String:arg1[32];

    GetCmdArg(1, arg1, sizeof(arg1));

    new target = FindTarget(client, arg1);
    if (target == -1)
    {
        return Plugin_Handled;
    }

    PrintToChat(client, "[SM] вызвал >> %N ; получил >> %N", client, target);
    PrintToChat(target, "[SM] вызвал >> %N ; получил >> %N", client, target);

    return Plugin_Handled;
}

Так гораздо лучше. Спасибо))
Но проблема осталась.
Если вызвать sm_lol name от имени сервера, сообщения в чат никому не придут
 

lolovo

Участник
Сообщения
17
Реакции
1
PrintToChat работает между игроками на сервере.
Берёшь код от @Серый™, меняешь указанное и избавляешься от проблемы.
Сделал так. Итог тот же.
Между игроками сообщения отправляются. Но если через консоль от имени сервера, то консоль получит сообщение, но игрок нет
 
Сверху Снизу