Решено AutoHotKey+Samp UDF

Тема в разделе "Вопросы", создана пользователем Magov1733, 5 дек 2018.

  1. Magov1733

    Magov1733 Участник

    Регистрация:
    24 окт 2018
    Сообщения:
    20
    Симпатии:
    0
    Доброй ночи. Помогите сделать скрипт на увольнение игрока из организации.
    Пример: пишем /uninvite id причину и скрипт автоматически отыгрывает:
    /do ......
    /me .....
    /try ......
    /uninvite id причина
    /f Nick Name ..... Причина: .....
    Подобное было в теме. Только теперь надо на uninvite с причиной.
    Заранее спасибо.
     
  2. sanchezzzz

    sanchezzzz Участник

    Регистрация:
    3 ноя 2018
    Сообщения:
    7
    Симпатии:
    0
    Зачем оно тебе? Есть MVD helper там есть отигровки этого
     
  3. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    Команда /unv [id] [причина].

    #NoEnv
    #SingleInstance force
    #Include SAMP-UDF.ahk ;подключаешь SAMP-UDF (создаёшь рядом со своим скриптом файлик SAMP-UDF.ahk, после переходишь в тему "https://blast.hk/threads/20318/"(без кавычек) и копируешь в данный файл код)
    
    $~NumpadEnter::
    $~Enter::
    if (!isInChat()) || (isDialogOpen() && (getDialogStyle() == 1 || getDialogStyle() == 3))
       Return
    Sleep 250
    tempText := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    tempCmd := StrSplit(tempText, " ")[1]
    if (tempCmd == "/unv")
    {
        if (RegExMatch(tempText, "^" tempCmd "\s+(\d{1,3})\s+(.{1,})$", out_pars))
        {
            Nick := RegExReplace(getPlayerNameById(out_pars1), "_", " ") ;выведет из ID ник без знака "_". EX: Pavel Pavlovich
            SendChat("/do текст")
            Sleep, 1200
            SendChat("/me текст")
            Sleep, 1200
            SendChat("/uninvite " out_pars1 " " out_pars2) ;out_pars1 - ID игрока, out_pars2 - причина
            Sleep, 1200
            SendChat("/f " Nick " был уволен по причине " out_pars2 ".")
            return
        }
        Else
            addChatMessage("Используй: " tempCmd " [Ид] [Текст]")
    }
    return
     
    Magov1733 нравится это.
  4. Kvisk

    Kvisk Постоянный участник

    Регистрация:
    20 ноя 2018
    Сообщения:
    93
    Симпатии:
    110
    Есть несколько минусов твоей активации, первое это то, что команда /unv хоть и читается, но она так же отправляется серверу, что ни есть хорошо.
    Так же, зачем создавать переменную "Nick"? Если можно сразу так:
    SendChat("/f " RegExReplace(getPlayerNameById(out_pars1), "_", " ") " был уволен по причине " out_pars2 ".")
     
  5. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    Хм, и где же она отправляется серверу?
    Читает память и выводит то, что написано в чате, но никак не отправляет что-то серверу. Выдумка, не более.

    Переменную можно тут же использовать в отыгровках, в лог-файле и т.п.
     
  6. Kvisk

    Kvisk Постоянный участник

    Регистрация:
    20 ноя 2018
    Сообщения:
    93
    Симпатии:
    110
    А вот мне кажется это не выдумка, давайте посмотрим скриншет?
     

    Вложения:

    • sa-mp-184.png
      sa-mp-184.png
      Размер файла:
      42,1 КБ
      Просмотров:
      96
  7. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    И что у тебя на скриншоте? Введи в чат любую команду, которой нет на сервере - тоже самое тебе напишет. И не нужно даже использовать при этом АХК скрипт.
    Покажи мне в коде, что именно отвечает за посыл введенной команды в память сервера.
     
  8. Kvisk

    Kvisk Постоянный участник

    Регистрация:
    20 ноя 2018
    Сообщения:
    93
    Симпатии:
    110
    лол, это чисто твой скрипт.. Просто на многих серверах если ты написал неизвестную команду серверу, то в чат нечего не выдаётся.

    #NoEnv
    #SingleInstance force
    #include D:\Taifyn\AutoHotKey\bind\kal.ahk
    
    $~NumpadEnter::
    $~Enter::
    if (!isInChat()) || (isDialogOpen() && (getDialogStyle() == 1 || getDialogStyle() == 3))
        Return
    Sleep 250
    tempText := readString(hGTA, dwSAMP + 0x12D8F8, 256)
    tempCmd := StrSplit(tempText, " ")[1]
    if (tempCmd == "/unv")
    {
        if (RegExMatch(tempText, "^" tempCmd "\s+(\d{1,3})\s+(.{1,})$", out_pars))
        {
            Nick := RegExReplace(getPlayerNameById(out_pars1), "_", " ") ;выведет из ID ник без знака "_". EX: Pavel Pavlovich
            addChatMessage("/do текст")
            Sleep, 1200
            addChatMessage("/me текст")
            Sleep, 1200
            addChatMessage("/uninvite " out_pars1 " " out_pars2) ;out_pars1 - ID игрока, out_pars2 - причина
            Sleep, 1200
            addChatMessage("/f " Nick " был уволен по причине " out_pars2 ".")
            return
        }
        Else
            addChatMessage("Используй: " tempCmd " [Ид] [Текст]")
    }
    return
    Зайди на любой сервер на котором тебе будет писать в чат что команда не известная и затести..
     
  9. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    Ты мне укажи кусок кода, который посылает серверу введенную команду.
    Попробовал - что с АХК, что без АХК пишет "Неизвестная команда".

    Если ты так уверен в чём-то, то будь добр это доказать.
     
  10. Kvisk

    Kvisk Постоянный участник

    Регистрация:
    20 ноя 2018
    Сообщения:
    93
    Симпатии:
    110
    what?! Я разе говорил что твой скрипт отсылает команду?! Я сказал что у твоей активации есть недостаток, так как ты и команду серверу отправляешь и скрипт активируешь.. Твой скрипт, грубо говоря, смотрит открыт ли у тебя чат, далее смотрит что в нём написано, если написано то что нужно он активируется, если нет то нет. НО так как у тебя активация по кнопке enter, ты ещё это и серверу отправляешь(то что у тебя написано в чате). То есть ты отправил команду серверу как обычную команду и твой скрипт запустил этой же самой командой..

    Что тебе доказывать нужно? я действительно не понимаю... Ты сам написал что и с акх и без акх у тебя пишет неизвестная команда.. Так что тебе ещё-то нужно ?
     
  11. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    Я сам тебя не понимаю, что ты несёшь вообще.

    Вот этого вообще понял - что отправляется серверу? Какая тебе активация нужна и какая лучше?
    Что-то там написал и толком объяснить не может.
    Объясню тебе мой код:
    По нажатию клавиши Enter считываем то, что отправилось в чат серверу, тобишь команду введённую пользователем (tempText), после ищем совпадения в нашем коде, а уже потом исполняем код. Где тут команда отправляется серверу? Где????
     
  12. Kvisk

    Kvisk Постоянный участник

    Регистрация:
    20 ноя 2018
    Сообщения:
    93
    Симпатии:
    110
    Ахахах, ну ты же сам написал..
    Суть в том что, я отправляю команду серверу и активирую твой скрипт...
    (А надо так что бы данная команда не отправлялась серверу, а только запускала скрипт)
     
  13. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    Через команду я другого способа не знаю, только если использовать именно командный процессор.
     
  14. Kvisk

    Kvisk Постоянный участник

    Регистрация:
    20 ноя 2018
    Сообщения:
    93
    Симпатии:
    110
    можно старый колхозный метод ))
    :?:/inv::
    Думаю человек давно уже получил решение своей проблемы, тему можно и закрыть
     
  15. #darksoor

    #darksoor Знающий

    Регистрация:
    10 июл 2016
    Сообщения:
    237
    Симпатии:
    50
    Колхозный, вот именно. Да к тому ещё и не удобный.
     
    Kvisk нравится это.