Вопросы по AHK-скриптингу

Adam_Rockwell

Активный
143
25
Кто-то то может шарит что происходит. В общем при первом вводе команды то есть /mask все отыгрывает и работает стабильно! Но при втором вводе команды, уже не прописывается 1-я строчка отыгровки и сама команда(/mask не работает)

Попробуй вот так.

Код:
:?:/mask::
sleep 500
Sendinput, {F6}/do В портфеле лежит несколько масок с изображением черепа.{Enter}
sleep 1100
Sendinput, {F6}/me спустив портфель с плеча открыл его и достал одну из них{Enter}
sleep 1100
Sendinput, {F6}/do Маска в руках.{Enter}
sleep 1100
Sendinput, {F6}/me резким движением натянул маску на лице{Enter}
sleep 700
Sendinput, {F6}/mask{Enter}
sleep 700
Sendinput, {F6}/do Маска на лице.{Enter}
return
 
Последнее редактирование модератором:

AnRtom

Новичок
13
1
Попробуй вот так.

:?:/mask::
sleep 500
Sendinput, {F6}/do В портфеле лежит несколько масок с изображением черепа.{Enter}
sleep 1100
Sendinput, {F6}/me спустив портфель с плеча открыл его и достал одну из них{Enter}
sleep 1100
Sendinput, {F6}/do Маска в руках.{Enter}
sleep 1100
Sendinput, {F6}/me резким движением натянул маску на лице{Enter}
sleep 700
Sendinput, {F6}/mask{Enter}
sleep 700
Sendinput, {F6}/do Маска на лице.{Enter}
return

Не-а появились даже "? ? ? ? ???? ???????"
 

RTD

Нестандартное звание
Модератор
391
414
можно ли сделать скрипт который читает чатлог самп и отправляет определенные строчки чатлога на форум?
Если у есть доступ к API форума или если ты умеешь подменять запросы.
Не-а появились даже "? ? ? ? ???? ???????"
АХК на ANSI-32 bit поставь
 

Nagenbl4

Новичок
107
2
Кто-то то может шарит что происходит. В общем при первом вводе команды то есть /mask все отыгрывает и работает стабильно! Но при втором вводе команды, уже не прописывается 1-я строчка отыгровки и сама команда(/mask не работает)
Вот код:
:?:/mask::
SendMessage, 0x50,, 0x4190419,, A
Sendinput, {F6}/do В портфеле лежит несколько масок с изображением черепа.{Enter}
sleep 1100
Sendinput, {F6}/me спустив портфель с плеча открыл его и достал одну из них{Enter}
sleep 1100
Sendinput, {F6}/do Маска в руках.{Enter}
sleep 1100
Sendinput, {F6}/me резким движением натянул маску на лице{Enter}
sleep 1100
Sendinput, {F6}/do Маска на лице.{Enter}
Попробуй вот так:

Код:
:?:/mask::
SendMessage, 0x50,, 0x4190419,, A
sleep 500
Sendinput, {F6}/do В портфеле лежит несколько масок с изображением черепа.{enter}
sleep 1100
Sendinput, {F6}/me спустив портфель с плеча открыл его и достал одну из них{enter}
sleep 1100
Sendinput, {F6}/do Маска в руках.{enter}
sleep 1100
Sendinput, {F6}/me резким движением натянул маску на лице{enter}
sleep 700
Sendinput, {F6}/mask{enter}
sleep 700
Sendinput, {F6}/do Маска на лице.{enter}
return
 

_DeAs_

Новичок
27
1
Можно ли убрать пункт Suspend Hotkeys и Pause Script ( или хотя бы первую ) и добавить ссылку на форум?
upload_2018-1-15_19-35-40.png
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Можно ли убрать пункт Suspend Hotkeys и Pause Script ( или хотя бы первую ) и добавить ссылку на форум?
Посмотреть вложение 11172
Пункты стандартного меню удалять по отделности нельзя.

Удалить польностю стандартное меню:
AutoHotKey:
Menu, Tray, NoStandard
Удалить полностью меню, включая добавленные вами пункты:
AutoHotKey:
Menu, Tray, DeleteAll
Создать пункт меню:
AutoHotKey:
Menu, Tray, Add, Кнопка 1, Button1
Создать черточку между пунктами меню:
AutoHotKey:
Menu, Tray, Add,
Еще подробнее: *ТыК*
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Компилятор же пишет ошибку, что ~Enter повторяется.
Ты использовал его несколько раз, засунь все действия на ~Enter в одно.
 

_DeAs_

Новичок
27
1
Компилятор же пишет ошибку, что ~Enter повторяется.
Ты использовал его несколько раз, засунь все действия на ~Enter в одно.
Все, понял, а как соединить эти 2 кода на Enter?

AutoHotKey:
~Enter::
if (isInChat() = 0)
    return
sleep 150
dwAddress := dwSAMP + 0x12D8F8
chatInput := readString(hGTA, dwAddress, 128)
if chatInput contains /carid A,/carid B,/carid C,/carid D,/carid E,/carid F,/carid G,/carid H,/carid I,/carid J,/carid K,/carid L,/carid M,/carid N,/carid O,/carid P,/carid Q,/carid R,/carid S,/carid T,/carid U,/carid V,/carid W,/carid X,/carid Y,/carid Z
И
AutoHotKey:
~Enter::
gosub, checkdialogMenu
return
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Все, понял, а как соединить эти 2 кода на Enter?

AutoHotKey:
~Enter::
if (isInChat() = 0)
    return
Sleep 150
dwAddress := dwSAMP + 0x12D8F8
chatInput := readString(hGTA, dwAddress, 128)
if chatInput contains /carid A,/carid B,/carid C,/carid D,/carid E,/carid F,/carid G,/carid H,/carid I,/carid J,/carid K,/carid L,/carid M,/carid N,/carid O,/carid P,/carid Q,/carid R,/carid S,/carid T,/carid U,/carid V,/carid W,/carid X,/carid Y,/carid Z
И
AutoHotKey:
~Enter::
gosub, checkdialogMenu
return
Все гениальное - просто
Немного переделал только
AutoHotKey:
$~NumpadEnter::
$~Enter::
Gosub, checkdialogMenu
If (isInChat() = 1 && isDialogOpen() = 0)
{
    sleep 250
    dwAddress := dwSAMP + 0x12D8F8
    chatInput := readString(hGTA, dwAddress, 256)
    If chatInput contains /carid A,/carid B,/carid C,/carid D,/carid E,/carid F,/carid G,/carid H,/carid I,/carid J,/carid K,/carid L,/carid M,/carid N,/carid O,/carid P,/carid Q,/carid R,/carid S,/carid T,/carid U,/carid V,/carid W,/carid X,/carid Y,/carid Z
    {
       
    }
}

Код:
~Enter::
gosub, checkdialogMenu
if (isInChat() = 0)
    return
sleep 150
dwAddress := dwSAMP + 0x12D8F8
chatInput := readString(hGTA, dwAddress, 128)
if chatInput contains /carid A,/carid B,/carid C,/carid D,/carid E,/carid F,/carid G,/carid H,/carid I,/carid J,/carid K,/carid L,/carid M,/carid N,/carid O,/carid P,/carid Q,/carid R,/carid S,/carid T,/carid U,/carid V,/carid W,/carid X,/carid Y,/carid Z
Чёт тип этого скорее всего, я просто тупой, нихуя не шарю
Зачем писать тогда если сам признаешься в отсутствии качеств требуемых тут? :trollface2:
 

_DeAs_

Новичок
27
1
Все гениальное - просто
Немного переделал только
AutoHotKey:
$~NumpadEnter::
$~Enter::
Gosub, checkdialogMenu
If (isInChat() = 1 && isDialogOpen() = 0)
{
    sleep 250
    dwAddress := dwSAMP + 0x12D8F8
    chatInput := readString(hGTA, dwAddress, 256)
    If chatInput contains /carid A,/carid B,/carid C,/carid D,/carid E,/carid F,/carid G,/carid H,/carid I,/carid J,/carid K,/carid L,/carid M,/carid N,/carid O,/carid P,/carid Q,/carid R,/carid S,/carid T,/carid U,/carid V,/carid W,/carid X,/carid Y,/carid Z
    {
      
    }
}
Проблема появляется прям на пути исправления старой =D не совсем шарю в этих ошибках, и что он от меня требует
upload_2018-1-15_21-35-35.png
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Проблема появляется прям на пути исправления старой :D не совсем шарю в этих ошибках, и что он от меня требует Посмотреть вложение 11177
Не первый раз ко мне с этой проблемой обращаются, постоянно у них нет этой функции.
Вставь следующий код в свой SAMP UDF:
AutoHotKey:
isDialogButtonSelected(btn := 1) {
    dwPointer := getDialogStructPtr()
    if (ErrorLevel || !dwPointer)
    return false
    dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR2_OFFSET)
    if (ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return 0
    }
    offset := (btn == 1 ? 0x165 : 0x2C5)
    sel := readMem(hGTA, dwPointer + offset, 1, "Byte")
    if (ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return false
    }
    ErrorLevel := ERROR_OK
    return sel
}
isDialogButton1Selected() {
    return isDialogButtonSelected(1)
}
isDialogButton2Selected() {
    return isDialogButtonSelected(2)
}
 

RTD

Нестандартное звание
Модератор
391
414
Проблема появляется прям на пути исправления старой :D не совсем шарю в этих ошибках, и что он от меня требует Посмотреть вложение 11177

Юзай LineResult() это намного проще и нету проблем с переменными. А если что-то не устраивает, то очень легко что-то изменить.
 

_DeAs_

Новичок
27
1
Не первый раз ко мне с этой проблемой обращаются, постоянно у них нет этой функции.
Вставь следующий код в свой SAMP UDF:
AutoHotKey:
isDialogButtonSelected(btn := 1) {
    dwPointer := getDialogStructPtr()
    if (ErrorLevel || !dwPointer)
    return false
    dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR2_OFFSET)
    if (ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return 0
    }
    offset := (btn == 1 ? 0x165 : 0x2C5)
    sel := readMem(hGTA, dwPointer + offset, 1, "Byte")
    if (ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return false
    }
    ErrorLevel := ERROR_OK
    return sel
}
isDialogButton1Selected() {
    return isDialogButtonSelected(1)
}
isDialogButton2Selected() {
    return isDialogButtonSelected(2)
}

То есть имея у себя в UDF такой код
AutoHotKey:
isDialogButtonSelected(btn := 1) {
    dwPointer := getDialogStructPtr()
    if (ErrorLevel || !dwPointer)
        return false
   
    dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR2_OFFSET)
    if (ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return 0
    }
   
    offset := (btn == 1 ? 0x165 : 0x2C5)
    sel := readMem(hGTA, dwPointer + offset, 1, "Byte")
    if (ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return false
    }
   
    ErrorLevel := ERROR_OK
    return sel
}
я должен заменить на тот, который ты мне скинул? Я же правильно понял?)
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
То есть имея у себя в UDF такой код
AutoHotKey:
isDialogButtonSelected(btn := 1) {
    dwPointer := getDialogStructPtr()
    if (ErrorLevel || !dwPointer)
        return false
  
    dwPointer := readDWORD(hGTA, dwPointer + SAMP_DIALOG_PTR2_OFFSET)
    if (ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return 0
    }
  
    offset := (btn == 1 ? 0x165 : 0x2C5)
    sel := readMem(hGTA, dwPointer + offset, 1, "Byte")
    if (ErrorLevel) {
        ErrorLevel := ERROR_READ_MEMORY
        return false
    }
  
    ErrorLevel := ERROR_OK
    return sel
}
я должен заменить на тот, который ты мне скинул? Я же правильно понял?)
Дописать это:
AutoHotKey:
isDialogButton1Selected() {
return isDialogButtonSelected(1)
}
isDialogButton2Selected() {
return isDialogButtonSelected(2)
}
Или в самой проверке заменить на isDialogButtonSelected(1 или 2)