- 310
- 172
Чекаешь чат и отсылаешь сообщение в ответ.Привет. Хочу узнать как делать такой скрипт:
В чате появляется строка например "привет", и сразу же чтобы в чат скрипт написал "ку".
Я просто на примере объяснил.
F2::
cl = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt
Loop
{
FileRead, clog, % cl
if (RegExMatch(clog, "пишешь тут на что реагировать")) {
FileDelete, % cl
; А тут пишешь нужные тебе действия
}
sleep, 1000
}
Return
Привет. Хочу узнать как делать такой скрипт:
В чате появляется строка например "привет", и сразу же чтобы в чат скрипт написал "ку".
Я просто на примере объяснил.
Плохой пример если честно...Код:F2:: cl = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt Loop { FileRead, clog, % cl if (RegExMatch(clog, "пишешь тут на что реагировать")) { FileDelete, % cl ; А тут пишешь нужные тебе действия } sleep, 1000 } Return
$~NumpadEnter::
$~Enter::
{
if (isInChat() && !isDialogOpen())
{
Sleep 250
dwAddress := dwSAMP + 0x12D8F8
chatInput := readString(hGTA, dwAddress, 256)
if (RegExMatch(chatInput, "^/r\s(.*)", out))
{
temp := Trim(out1)
if (temp == "")
addChatMessageEx(0xFF8CA6, "Используйте ""/r текст""")
else
{
if (!RegExMatch(temp, "\(\(\s.*\s\)\)"))
SendChat("/me сказал в рацию """ out1 """")
}
}
else if RegExMatch(chatInput, "^/settag\s(.*)", out)
{
IniWrite, %out1%, %A_MyDocuments%\GTA San Andreas User Files\SAMP\setting.ini, Setup, Tag
addChatMessageEx(0xFF8CA6, "Установлен новый тэг: " out1)
}
}
return
1. Ты не закрыл фигурную скобку которая Enter и вообще она там даже не нужна...Короч тут нарыл на форумнике AHK отыгровки РП рации, ток вот не могу запустить, ошибка выбивает, может в нем чет не правильно, можете помочь?
Код:$~NumpadEnter:: $~Enter:: { if (isInChat() && !isDialogOpen()) { Sleep 250 dwAddress := dwSAMP + 0x12D8F8 chatInput := readString(hGTA, dwAddress, 256) if (RegExMatch(chatInput, "^/r\s(.*)", out)) { temp := Trim(out1) if (temp == "") addChatMessageEx(0xFF8CA6, "Используйте ""/r текст""") else { if (!RegExMatch(temp, "\(\(\s.*\s\)\)")) SendChat("/me сказал в рацию """ out1 """") } } else if RegExMatch(chatInput, "^/settag\s(.*)", out) { IniWrite, %out1%, %A_MyDocuments%\GTA San Andreas User Files\SAMP\setting.ini, Setup, Tag addChatMessageEx(0xFF8CA6, "Установлен новый тэг: " out1) } } return
![]()
Потому что не через getChatLineEx?Плохой пример если честно...
Ринат) Перепиши Диалоги на ахк,чтоб не крашилисьЕсли ты про sendinput
Можно, в конце {left кол-во символов назад} вроде бы.
showDialog(style, caption, text, button1, button2 := "", id := 1) {
style += 0
style := Floor(style)
id += 0
id := Floor(id)
caption := "" caption
text := "" text
button1 := "" button1
button2 := "" button2
ErrorLevel := ERROR_READ_MEMORY
if (id < 0 || id > 32767 || style < 0 || style > 5 || StrLen(caption) > 64 || StrLen(text) > 4096 || StrLen(button1) > 10 || StrLen(button2) > 10)
return false
if (!checkHandles())
return false
dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG
sleep 200
dwAddress := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR)
if (ErrorLevel || !dwAddress) {
return false
}
writeString(hGTA, pParam5, caption)
if (ErrorLevel)
return false
writeString(hGTA, pParam1, text)
if (ErrorLevel)
return false
writeString(hGTA, pParam5 + 512, button1)
if (ErrorLevel)
return false
writeString(hGTA, pParam5+StrLen(caption) + 1, button2)
if (ErrorLevel)
return false
;mov + 7 * push + call + retn
dwLen := 5 + 7 * 5 + 5 + 1
VarSetCapacity(injectData, dwLen, 0)
NumPut(0xB9, injectData, 0, "UChar") ;0 + 1 ;mov ecx
NumPut(dwAddress, injectData, 1, "UInt") ;1 + 4
NumPut(0x68, injectData, 5, "UChar") ;5 + 1 ;push send
NumPut(1, injectData, 6, "UInt") ;6 + 4
NumPut(0x68, injectData, 10, "UChar") ;10 + 1 ;push button2
NumPut(pParam5 + StrLen(caption) + 1, injectData, 11, "UInt") ;11 + 4
NumPut(0x68, injectData, 15, "UChar") ;15 + 1 ;push button1
NumPut(pParam5 + 512, injectData, 16, "UInt") ;16 + 4
NumPut(0x68, injectData, 20, "UChar") ;20 + 1 ;push text
NumPut(pParam1, injectData, 21, "UInt") ;21 + 4
NumPut(0x68, injectData, 25, "UChar") ;25 + 1 ;push caption
NumPut(pParam5, injectData, 26, "UInt") ;26 + 4
NumPut(0x68, injectData, 30, "UChar") ;30 + 1 ;push style
NumPut(style, injectData, 31, "UInt") ;31 + 4
NumPut(0x68, injectData, 35, "UChar") ;35 + 1 ;push id
NumPut(id, injectData, 36, "UInt") ;36 + 4
NumPut(0xE8, injectData, 40, "UChar") ;40 + 1 ;call
offset := dwFunc - (pInjectFunc + 45)
NumPut(offset, injectData, 41, "Int") ;41 + 4
NumPut(0xC3, injectData, 45, "UChar") ;45 + 1 ;retn
writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
if (ErrorLevel)
return false
hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
if (ErrorLevel)
return false
waitForSingleObject(hThread, 0xFFFFFFFF)
return false
return true
}
Только те что используют адреса сингла, и то не факт что все будут работать, MTA может мутировать код.Можно ли использовать инклуд SAMPUDF в мта?
По сути, адреса-то должны использоваться одни и те же(Сингла)? Если это процесс игры один и тот же?
Например получить координаты или ещё что-то?
Что бы не крашило, ахк код должен исполняться в процессе gta_sa.exe, а функции сампа вызываться напрямую.Ринат) Перепиши Диалоги на ахк,чтоб не крашились
Код:showDialog(style, caption, text, button1, button2 := "", id := 1) { style += 0 style := Floor(style) id += 0 id := Floor(id) caption := "" caption text := "" text button1 := "" button1 button2 := "" button2 ErrorLevel := ERROR_READ_MEMORY if (id < 0 || id > 32767 || style < 0 || style > 5 || StrLen(caption) > 64 || StrLen(text) > 4096 || StrLen(button1) > 10 || StrLen(button2) > 10) return false if (!checkHandles()) return false dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG sleep 200 dwAddress := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR) if (ErrorLevel || !dwAddress) { return false } writeString(hGTA, pParam5, caption) if (ErrorLevel) return false writeString(hGTA, pParam1, text) if (ErrorLevel) return false writeString(hGTA, pParam5 + 512, button1) if (ErrorLevel) return false writeString(hGTA, pParam5+StrLen(caption) + 1, button2) if (ErrorLevel) return false ;mov + 7 * push + call + retn dwLen := 5 + 7 * 5 + 5 + 1 VarSetCapacity(injectData, dwLen, 0) NumPut(0xB9, injectData, 0, "UChar") ;0 + 1 ;mov ecx NumPut(dwAddress, injectData, 1, "UInt") ;1 + 4 NumPut(0x68, injectData, 5, "UChar") ;5 + 1 ;push send NumPut(1, injectData, 6, "UInt") ;6 + 4 NumPut(0x68, injectData, 10, "UChar") ;10 + 1 ;push button2 NumPut(pParam5 + StrLen(caption) + 1, injectData, 11, "UInt") ;11 + 4 NumPut(0x68, injectData, 15, "UChar") ;15 + 1 ;push button1 NumPut(pParam5 + 512, injectData, 16, "UInt") ;16 + 4 NumPut(0x68, injectData, 20, "UChar") ;20 + 1 ;push text NumPut(pParam1, injectData, 21, "UInt") ;21 + 4 NumPut(0x68, injectData, 25, "UChar") ;25 + 1 ;push caption NumPut(pParam5, injectData, 26, "UInt") ;26 + 4 NumPut(0x68, injectData, 30, "UChar") ;30 + 1 ;push style NumPut(style, injectData, 31, "UInt") ;31 + 4 NumPut(0x68, injectData, 35, "UChar") ;35 + 1 ;push id NumPut(id, injectData, 36, "UInt") ;36 + 4 NumPut(0xE8, injectData, 40, "UChar") ;40 + 1 ;call offset := dwFunc - (pInjectFunc + 45) NumPut(offset, injectData, 41, "Int") ;41 + 4 NumPut(0xC3, injectData, 45, "UChar") ;45 + 1 ;retn writeRaw(hGTA, pInjectFunc, &injectData, dwLen) if (ErrorLevel) return false hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0) if (ErrorLevel) return false waitForSingleObject(hThread, 0xFFFFFFFF) return false return true }
#IfWinActive GTA:SA:MP
SendMode Input
#UseHook
#NoEnv
#SingleInstance, force
F1::
; showDialog(Стиль, Заголовок, Содержание, Кнопка 1, Кнопка 2)
showDialog (0) ,"Все команды АХК", "1. /лечение - ппредложение таблетки" `n{#0000ff} 2. /рп - 10 РПшек.
Нет, использование loop уже плохой пример. А приравнивать каждый раз при нажатии клавиши в переменную путь до чат лога, тоже бред...Потому что не через getChatLineEx?
Скобки закрой и ковычки..Решил создать АХК что бы при нажатии F1 выскакивало окошко со всеми командами моего АХК.
Код:
Код:#IfWinActive GTA:SA:MP SendMode Input #UseHook #NoEnv #SingleInstance, force F1:: ; showDialog(Стиль, Заголовок, Содержание, Кнопка 1, Кнопка 2) showDialog (0) ,"Все команды АХК", "1. /лечение - ппредложение таблетки" `n{#0000ff} 2. /рп - 10 РПшек.
Но выдает такую ошибку
Посмотреть вложение 16121
ShowDialog(0, "Все команды АХК", "1. /лечение - ппредложение таблетки`n{#0000ff} 2. /рп - 10 РПшек.", "X")
!1::
active := !active
SetTimer, Start, % (active ? 0 : "Off")
Start:
if (RegExMatch(getChatLineEx(), "\w+\sты\sпоймал\s\w+", var)) {
SendInput, {F8}
}
return