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

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

  1. lolovo

    lolovo

    Сообщения:
    24
    Симпатии:
    0
    Доброй ночи дорогие форумчане.
    Стукнуло что-то в голову - решил научиться писать плагины на 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_lolADMFLAG_SLAY)
    }

    public 
    Action:Command_lol(clientargs)
    {
        new 
    String:arg1[32]

        
    GetCmdArg(1arg1sizeof(arg1))

        new 
    target FindTarget(clientarg1)
        if (
    target == -1)
        {
            return 
    Plugin_Handled;
        }

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

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

        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
     
  2. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.566
    Симпатии:
    1.150
    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_lolADMFLAG_SLAY);
    }

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

        new 
    String:arg1[32];

        
    GetCmdArg(1arg1sizeof(arg1));

        new 
    target FindTarget(clientarg1);
        if (
    target == -1)
        {
            return 
    Plugin_Handled;
        }

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

        return 
    Plugin_Handled;
    }
     
  3. lolovo

    lolovo

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

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.557
    Симпатии:
    1.988
    Потому что ошибка в логах.
    Заменить на
    PHP:
    ReplyToCommand(client
     
  5. lolovo

    lolovo

    Сообщения:
    24
    Симпатии:
    0
    смотри мой первый код. Я так и делал
     
  6. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.557
    Симпатии:
    1.988
    Берёшь код от @Серый™, меняешь указанное и избавляешься от проблемы.
     
  7. lolovo

    lolovo

    Сообщения:
    24
    Симпатии:
    0
    PrintToChat работает между игроками на сервере.
    Сделал так. Итог тот же.
    Между игроками сообщения отправляются. Но если через консоль от имени сервера, то консоль получит сообщение, но игрок нет