Ник с Таб

Статус
В этой теме нельзя размещать новые ответы.

Magov1733

Новичок
Автор темы
20
0
Привет. Помогите сделать AHK скрипт что бы при вводе в чат(Пример: /контракт 287(id))проигрывался бинд
/do Рюкзак висит на спине.
/me снял рюкзак
/me расстегнул рюкзак
/me достал форму контрактника
/do Форма в руках.
/me передал форму человеку *Nick Name* ; берётся из таб при вводе /контракт 287(id)
/invite 287(id)
и автоматический выбор скина.(Установлен в коде.)(к примеру {down1},{down2} и т.п.)

Заранее, всем спасибо за помощь.
 

darksoor

Известный
674
353
AutoHotKey:
#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
chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
if (RegExMatch(chatInput, "^/контракт (\d{1,3})", var)) {
   SendChat("/do Рюкзак висит на спине.")
   Sleep, 1000
   ; Дальше по аналогии добавляешь отыгровку
   SendChat("/invite " var1)
   while (!isDialogOpen())
      Continue
   setDialogIndex("2") ;выбор второй сточки в диалоге
   Sleep, 200
   Sendinput, {vkD}
   Return
}
Return
 
  • Нравится
Реакции: Magov1733

Kvisk

Известный
203
208
Ну или так:
AutoHotKey:
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#include sampUDF.ahk

F2::
sleep, 300
Reload
return

:?:/контракт::
sendinput, /контракт{space}
blockChatInput()
Input, id, V, {enter}{esc}
sleep, 300
unblockChatInput()
name := getPlayerNameById(id)
space := " "
stringReplace, name, name, _, %space%, all
SendChat("/do Рюкзак висит на спине.")
sleep, 1100
SendChat("/me снял рюкзак")
sleep, 1100
SendChat("/me расстегнул рюкзак")
sleep, 1100
SendChat("/me достал форму контрактника")
sleep, 1100
SendChat("/do Форма в руках.")
sleep, 1100
SendChat("/me передал форму человеку " name)
sleep, 1100
SendChat("/invite " id)
;-------Код ниже взят из примера выше--------
while (!isDialogOpen()) ; Дожидается открытия диалога, если человек отказался от контракта и диалог не откроется, нажми F2, чтобы перезапустить скрипт
    Continue
setDialogIndex("3") ; если диалоговое окно открылось, выбирает строку под номером 3
Sleep, 300
Sendinput, {enter} ; нажимает Enter
return
 

darksoor

Известный
674
353
Ну или так:
AutoHotKey:
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#include sampUDF.ahk

F2::
sleep, 300
Reload
return

:?:/контракт::
sendinput, /контракт{space}
blockChatInput()
Input, id, V, {enter}{esc}
sleep, 300
unblockChatInput()
name := getPlayerNameById(id)
space := " "
stringReplace, name, name, _, %space%, all
SendChat("/do Рюкзак висит на спине.")
sleep, 1100
SendChat("/me снял рюкзак")
sleep, 1100
SendChat("/me расстегнул рюкзак")
sleep, 1100
SendChat("/me достал форму контрактника")
sleep, 1100
SendChat("/do Форма в руках.")
sleep, 1100
SendChat("/me передал форму человеку " name)
sleep, 1100
SendChat("/invite " id)
;-------Код ниже взят из примера выше--------
while (!isDialogOpen()) ; Дожидается открытия диалога, если человек отказался от контракта и диалог не откроется, нажми F2, чтобы перезапустить скрипт
    Continue
setDialogIndex("3") ; если диалоговое окно открылось, выбирает строку под номером 3
Sleep, 300
Sendinput, {enter} ; нажимает Enter
return

Код фигня
AutoHotKey:
name := getPlayerNameById(id)
space := " "
stringReplace, name, name, _, %space%, all
;Можно в одну сделать
name := RegExReplace(getPlayerNameById(id), "_", " ")
И используя udf корячится с автозаменой, тоже бредово. Лучше командный процессор использовать.
 
  • Нравится
Реакции: Kvisk

Magov1733

Новичок
Автор темы
20
0
AutoHotKey:
#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
chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
if (RegExMatch(chatInput, "^/контракт (\d{1,3})", var)) {
   SendChat("/do Рюкзак висит на спине.")
   Sleep, 1000
   ; Дальше по аналогии добавляешь отыгровку
   SendChat("/invite " var1)
   while (!isDialogOpen())
      Continue
   setDialogIndex("2") ;выбор второй сточки в диалоге
   Sleep, 200
   Sendinput, {vkD}
   Return
}
Return
Ошибка в
if (!isInChat() || (isDialogOpen() && (getDialogStyle() == 1 || getDialogStyle() == 3))
 

Kvisk

Известный
203
208
Ну возьми мой вариант, он работает. Команду активации можешь поменять, но учти что каждый раз её нужно вводить заново. Я бы поменял на /con (id). Если что данная команда серверу не отправляется
 
  • Нравится
Реакции: Magov1733

Magov1733

Новичок
Автор темы
20
0
Последнее редактирование:

darksoor

Известный
674
353
А как сделать что бы ник проигрывался в /me без _?
"var" подставить?
AutoHotKey:
name := RegExReplace(getPlayerNameById(id), "_", " ") ;Если ник будет в формате Nick_Name, то он будет таким Nick Name. Все просто и одна переменная.
 
  • Нравится
Реакции: Magov1733

Magov1733

Новичок
Автор темы
20
0
AutoHotKey:
name := RegExReplace(getPlayerNameById(id), "_", " ") ;Если ник будет в формате Nick_Name, то он будет таким Nick Name. Все просто и одна переменная.
Поставил строчку:
SendChat("/me передал форму " name)
Всё равно 0 id в табе берёт.
Вообщем вот:
Код:
#NoEnv
#SingleInstance force
#Include SAMP-UDF-Developer.ahk

$~NumpadEnter::
$~Enter::
if (!isInChat()) || (isDialogOpen() && (getDialogStyle() == 1 || getDialogStyle() == 3))
   Return
Sleep 250
name := RegExReplace(getPlayerNameById(id), "_", " ") ;Если ник будет в формате Nick_Name, то он будет таким Nick Name. Все просто и одна переменная.
chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
if (RegExMatch(chatInput, "^/con (\d{1,3})", var)) {
   AddChatMessage("/do Рюкзак висит на спине.")
   Sleep, 1000
   AddChatMessage("/me передал форму " name)
   ; Дальше по аналогии добавляешь отыгровку
   SendChat("/invite " var1)
   while (!isDialogOpen())
      Continue
   setDialogIndex("2") ;выбор второй сточки в диалоге
   Sleep, 200
   Sendinput, {vkD}
   Return
}
Return
 
Последнее редактирование:

darksoor

Известный
674
353
Поставил строчку:

Всё равно 0 id в табе берёт.
Вообщем вот:
Код:
#NoEnv
#SingleInstance force
#Include SAMP-UDF-Developer.ahk

$~NumpadEnter::
$~Enter::
if (!isInChat()) || (isDialogOpen() && (getDialogStyle() == 1 || getDialogStyle() == 3))
   Return
Sleep 250
name := RegExReplace(getPlayerNameById(id), "_", " ") ;Если ник будет в формате Nick_Name, то он будет таким Nick Name. Все просто и одна переменная.
chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
if (RegExMatch(chatInput, "^/con (\d{1,3})", var)) {
   AddChatMessage("/do Рюкзак висит на спине.")
   Sleep, 1000
   AddChatMessage("/me передал форму " name)
   ; Дальше по аналогии добавляешь отыгровку
   SendChat("/invite " var1)
   while (!isDialogOpen())
      Continue
   setDialogIndex("2") ;выбор второй сточки в диалоге
   Sleep, 200
   Sendinput, {vkD}
   Return
}
Return

Сначала код разбери хорошо, что за что отвечает, потом уже вставляй. После уоманды /con ты выводишь id игрока в переменную var1, после уже:
AutoHotKey:
name := RegExReplace(getPlayerNameById(var1), "_", " ")
 

Magov1733

Новичок
Автор темы
20
0
Сначала код разбери хорошо, что за что отвечает, потом уже вставляй. После уоманды /con ты выводишь id игрока в переменную var1, после уже:
AutoHotKey:
name := RegExReplace(getPlayerNameById(var1), "_", " ")
Я не силён в AHK+UDF скриптинге.

Сначала код разбери хорошо, что за что отвечает, потом уже вставляй. После уоманды /con ты выводишь id игрока в переменную var1, после уже:
AutoHotKey:
name := RegExReplace(getPlayerNameById(var1), "_", " ")
Спасибо, всё настроил. Только нужен
Код:
F2::
sleep, 300
Reload
return
 
Статус
В этой теме нельзя размещать новые ответы.