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

darksoor

Известный
674
353
Я не джизл.


Пишет что он активирован но не бежит. Без if (!isInChat()) работает нормально, что за дичь?
Я его сам писал. Обидно.
1 команда /fastrun - больше ничего не нужно. По это команде скрипт будет включать и выключать быстрый бег.
AutoHotKey:
#NoEnv
#SingleInstance force
#Include SAMP-UDF.ahk

$~NumpadEnter::
$~Enter::
if (isInChat() and !isDialogOpen())
{
   sleep 200
   chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
   if (chatInput == "/fastrun")
   {
      fast := !fast
      showGameText("FastRun:" (fast ? "ON" : "OFF"), 500, 1)
      SetTimer, fast, % (fast ? 5 : "off")
      return
   }
}
return

fast:
if (!isInChat()) {
   Send, {Space down}
}
return

Потому что юзаешь код говно кодера.
Без оскорблений, попрошу.
Да, я знаю, что я косякнул, но мог бы и указать человеку правильный путь (хотя я ему и показывал его, просто ошибся строкой, т.к. писал с телефона по его коду). Я не скажу, что я отличный кодер, но кое-что могу. Точно не говно, как ты выразился.
Постарайся быть к людям добрее, и сними уже наконец корону с головы.

Привет.

Как сделать , дабы при использовании 4-го типа диалога (Интерфейс: Нажми :0) включалась определенная функция , в данном случае логгирование , и зеленый текст "Вкл" менялся на противоположное (Выкл / Вкл)

Заранее спасибо всем)

Вот тебе наглядный пример.
Если будут вопросы - задавай)

AutoHotKey:
LineResult() { ; данная функция возвращает номер выбранной строки в диалоге. Не работает на кнопки диалога (button которые).
   if (!isDialogOpen())
      return false
   if (getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
      return false
   while(!GetKeyState("LButton", "P") && !GetKeyState("Enter", "P") && !GetKeyState("Esc", "P"))
      continue
   if (GetKeyState("Enter", "P"))
      return getDialogIndex()
   else if (GetKeyState("Esc", "P"))
      return false
   else {
      KeyWait, LButton
      KeyWait, LButton, D T0.4
      if (isDialogOpen())
         return LineResult()
      else
         return getDialogIndex()
   }
}

#NoEnv
#SingleInstance force
#Include SAMP-UDF.ahk

var := 1

$~NumpadEnter::
$~Enter::
if (isInChat() and !isDialogOpen())
{
   sleep 200
   chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
   if (chatInput == "/command")
   {
      Gosub, dialog
      return
   }
}
return

dialog:
var_change := (var ? "{90EE90}Вкл" : "{FF0000}Выкл")
showDialog(4, "{FFFFFF}T | {FFFF00}Config", "{FFFFFF}Логирование действий`t{FFFFFF}|" var_change, "Закрыть")
Result := LineResult()
if (!Result)
   return
if (Result == 1) { ; если выбрана первая строка в диалоге, то выполняем действие действие
   var := (var ? 0 : 1)   
   Gosub, dialog
}
return
 
Последнее редактирование:

Phoenixxx_CZAR

Известный
61
31
1 команда /fastrun - больше ничего не нужно. По это команде скрипт будет включать и выключать быстрый бег.
AutoHotKey:
#NoEnv
#SingleInstance force
#Include SAMP-UDF.ahk

$~NumpadEnter::
$~vkD::
if (isInChat() and !isDialogOpen())
{
   sleep 200
   chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
   if (chatInput == "/fastrun")
   {
      fast := !fast
      showGameText((fast ? "FastRun:ON" : "FastRun:OFF"), 500, 1)
      SetTimer, fast, % (fast ? 5 : "off")
      return
   }
}
return

fast:
if (!isInChat()) {
   Send, {Space down}
   Sleep, 1
   Send, {Space up}
}
return


Без оскорблений, попрошу.
Да, я знаю, что я косякнул, но мог бы и указать человеку правильный путь (хотя я ему и показывал его, просто ошибся строкой, т.к. писал с телефона по его коду). Я не скажу, что я отличный кодер, но кое-что могу. Точно не говно, как ты выразился.
Постарайся быть к людям добрее, и сними уже наконец корону с головы.



Вот тебе наглядный пример.
Если будут вопросы - задавай)

AutoHotKey:
LineResult() { ; данная функция возвращает номер выбранной строки в диалоге. Не работает на кнопки диалога (button которые).
   if (!isDialogOpen())
      return false
   if (getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
      return false
   while(!GetKeyState("LButton", "P") && !GetKeyState("Enter", "P") && !GetKeyState("Esc", "P"))
      continue
   if (GetKeyState("Enter", "P"))
      return getDialogIndex()
   else if (GetKeyState("Esc", "P"))
      return false
   else {
      KeyWait, LButton
      KeyWait, LButton, D T0.4
      if (isDialogOpen())
         return LineResult()
      else
         return getDialogIndex()
   }
}

#NoEnv
#SingleInstance force
#Include SAMP-UDF.ahk

var := 1

$~NumpadEnter::
$~vkD::
if (isInChat() and !isDialogOpen())
{
   sleep 200
   chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
   if (chatInput == "/command")
   {
      Gosub, dialog
      return
   }
}
return

dialog:
var_change := (var ? "{90EE90}Вкл" : "{FF0000}Выкл")
showDialog(4, "{FFFFFF}T | {FFFF00}Config", "{FFFFFF}Логирование действий`t{FFFFFF}|" var_change, "Закрыть")
Result := LineResult()
if (!Result)
   return
if (Result == 1) { ; если выбрана первая строка в диалоге, то выполняем действие действие
   if (var == 1) {
      var := 0
      Gosub, dialog
      return
   } else {
      var := 1
      Gosub, dialog
      return
   }
}
return
Извиняюсь конечно, сейчас ты скажешь тоже косякнул и отмазки аля с телефона пишу?

AutoHotKey:
showGameText((fast ? "FastRun:ON" : "FastRun:OFF"), 500, 1)
Зачем дублировать текст, который можно вынести за скобки? (FastRun:)

AutoHotKey:
fast := !fast     
showGameText((fast ? "FastRun:ON" : "FastRun:OFF"), 500, 1)
Можно было и в одной строке это записать.

AutoHotKey:
LineResult()
Говно функция, которая циклит скрипт пока не нажметься клавиша, не глупо ли? Как по мне глупо.

AutoHotKey:
$~NumpadEnter::
$~vkD::
vkD - включает в себя и ENTER и NumpadEnter.

AutoHotKey:
Send, {Space down}    
Sleep, 1    
Send, {Space up}
Бесполезный слип и не нужное отжатие клавиши.

AutoHotKey:
   if (var == 1) {
      var := 0
      Gosub, dialog
      return
   } else {
      var := 1
      Gosub, dialog
      return
   }
Боже.. Ну зачем??? Это же все делается в две строки.

Что-то еще мне попробуешь предъявить?
Если ты не говно кодер, то кто? В таком маленьком промежутке и столько косяков..
 
Последнее редактирование:

darksoor

Известный
674
353
AutoHotKey:
showGameText((fast ? "FastRun:ON" : "FastRun:OFF"), 500, 1)
Зачем дублировать текст, который можно вынести за скобки? (FastRun:)

Лишь бы докапаться, ну раз тебе глаза мазолить не будет, держи:
AutoHotKey:
showGameText("FastRun:" (fast ? "ON" : "OFF"), 500, 1)


AutoHotKey:
fast := !fast    
showGameText((fast ? "FastRun:ON" : "FastRun:OFF"), 500, 1)
Можно было и в одной строке это записать.

Покажи как..

AutoHotKey:
LineResult()
Говно функция, которая циклит скрипт пока не нажметься клавиша, не глупо ли? Как по мне глупо.

Для тебя глупо, для других - ну ты же всё равно нажмёшь на любую из кнопок (Enter, ESC либо Левая кнопка мыши)....
Если знаешь лучше способ - покажи его, или только пустословить мастер?

AutoHotKey:
$~NumpadEnter::
$~vkD::
vkD - включает в себя и ENTER и NumpadEnter.

Да ладно??? Америку мне открыл, божее...
Убери NumpadEnter, а уже после нажми на него. Что? Ничего не происходит? vkD включает в себя ENTER и NumpadEnter... Тогда почему не работает?

Чтобы у тебя кровь с глаз не потекла...
AutoHotKey:
$~NumpadEnter::
$~Enter::

AutoHotKey:
Send, {Space down}
Sleep, 1   
Send, {Space up}
Бесполезный слип и не нужное отжатие клавиши.

Сделал по его примеру.
Опять же, чтобы всё с твоими глазами было хорошо:
AutoHotKey:
fast:
if (!isInChat()) {
   Send, {Space down}
}
return

AutoHotKey:
   if (var == 1) {
      var := 0
      Gosub, dialog
      return
   } else {
      var := 1
      Gosub, dialog
      return
   }
Боже.. Ну зачем??? Это же все делается в две строки.

Тут не согласится очень трудно. Спасибо за подсказку. На, держи:
AutoHotKey:
if (Result == 1) { ; если выбрана первая строка в диалоге, то действие
   var := (var ? 0 : 1)
   Gosub, dialog
}

Что-то еще мне попробуешь предъявить?
Если ты не говно кодер, то кто? В таком маленьком промежутке и столько косяков..

Пусть для тебя я говно кодер, мне плевать на мнение человека, который одел на себя корону и только и делает, что оскорбляет людей.
Показал на мои ошибки - молодец, но писать тут что я говно кодер - не нужно.
Я тебе ничего не предъявлял вообще, и предъявлять не собираюсь. Надеюсь мы больше никогда не пересечёмся, либо общаться с таким человеком просто противно. Удачи.
 
  • Нравится
Реакции: Viktor12 и 7jizzle

Phoenixxx_CZAR

Известный
61
31
AutoHotKey:
showGameText("FastRun:" ((fast := !fast) ? "ON" : "OFF"), 500, 1)

Для тебя глупо, для других - ну ты же всё равно нажмёшь на любую из кнопок (Enter, ESC либо Левая кнопка мыши)....
Если знаешь лучше способ - покажи его, или только пустословить мастер?
Давно уже делал говно урок.

Убери NumpadEnter, а уже после нажми на него. Что? Ничего не происходит? vkD включает в себя ENTER и NumpadEnter... Тогда почему не работает?
AutoHotKey:
vkD::
msgbox, 1
return
А у меня работает, вот мистика да?
(Как оказалось, проблема в ~, без него работает что тот ентер, что другой.)

Тут не согласится очень трудно. Спасибо за подсказку. На, держи:
if (Result == 1) { ; если выбрана первая строка в диалоге, то действие
var := (var ? 0 : 1)
Gosub, dialog
}
AutoHotKey:
var := !var

только и делает, что оскорбляет людей.
За дело. Вы продвигаете быдло код в массы, не нужно так делать.

Удачи тебе.

Я не силен в программировании. Как мне вывести переменную uName, дабы использовать ее за пределами (например: по нажатию кнопки NumPadMult)
Код:
SendMode Input
SetWorkingDir %A_ScriptDir%
#UseHook
#NoEnv
#SingleInstance force
#include %A_ScriptDir%\SAMP.ahk

uName := ""

#If !IsInChat()
NumPadEnter::
    ShowDialog(2, "Functions", "Lectures`nName", "Okay", "Exit")
return
#If IsDialogOpen() && WinActive("GTA:SA:MP")
Enter::
    OnDialogResponse(true)
return
ESC::
    OnDialogResponse(false)
return
#If
OnDialogResponse(response) {
    caption := GetDialogCaption()
    if (response) {
        if (caption == "Functions") {
            line := GetDialogLine__(GetDialogIndex())
            if (line == "Lectures") {
                ShowDialog(2, "Lectures", "Dress-code`nSubordination", "Okay", "Exit")
            }
            else if (line == "Name") {
                ShowDialog(1, "Name", "Enter your name:", "Okay", "Exit")
            }
        } else if (caption == "Lectures") {
            line := GetDialogLine__(GetDialogIndex())
            AddChatMessage(line)
            Send, {Enter}
        } else if (caption == "Name") {
            clipboardBuffer := ClipboardAll
            clipboard := ""
            Send, ^{A}
            Send, ^{X}
            sleep, 100
            uName := clipboard
            clipboard := clipboardBuffer
            if (uName != -1 && uName != "") {
                AddChatMessage("Your name: " uName)
            }
            Send, {Enter}
        } else {
            Send, {Enter}
        }
    } else {
        if (caption == "Functions") {
            ShowDialog(2, "Functions", "Lectures`nName", "Okay", "Exit")
        }
        else {
            Send, {ESC}
        }
    }
}

NumPadMult::
AddChatMessage("uName := " uName)
return
global uName := ""
 

asdzxcjqwe

¯\_(ツ)_/¯
Друг
621
705
Вы продвигаете быдло код в массы
быдлокодом было бы это (и то вряд ли, я бы никого не поправлял за это, зачем?):
AutoHotKey:
; я бы назвал это сильно подробным кодом, а не быдлом
if (fast == true)
{
    showGameText("FastRun is ON", 500, 1)
}
else
{
    showGameText("FastRun is OFF", 500, 1)
}
Но никак не то, что у него написано. Это просто другая вариация кода, другой стиль, отличный от твоего. Люди не роботы и не обладают коллективным сознанием, мы не можем все писать код абсолютно одинаково, а ты только и говоришь всем, каким бы ты хотел видеть их код, но ничего хорошего ты из этого не делаешь. Бля, как можно было доебаться за лишнюю строчку...

Или я тоже могу назвать твой код быдлом только потому, что он отличается от моего, например, когда ты два раза подряд указываешь одну и ту же переменную:
AutoHotKey:
(fast := !fast ? "on" : "off")
когда ты мог просто:
AutoHotKey:
((fast ^= 1) ? "on" : "off")
; минус это лишние скобки, которые здесь необходимы из-за оператора ^=
или потому что ты ставишь лишние скобки:
AutoHotKey:
showGameText("FastRun:" ((fast := !fast) ? "ON" : "OFF"), 500, 1)
когда при var := !var они не нужны (да называть быдлом за это вообще зашквар):
AutoHotKey:
showGameText("FastRun: " (fast := !fast ? "ON" : "OFF"), 500, 1)
или за использование глобальных переменных (не сильно критично, забей):
или может за то, что до сих пор пишешь на ахк спустя такое время
MrC1A7S.gif

и да, дело говорят, ты постоянно всех обсираешь вокруг. а смысл? зачем разводить флейм под каждой темой? и вообще не особо важно каким будет код если это код на ahk
+ это не та тема, где нужно поправлять чужой код и тем более разводить срачи
зодумойся
thonking.png
 
  • Нравится
Реакции: #Rin и darksoor

vlaaDick228

Новичок
10
0
Привет. Возможно ли запускать несколько циклов одновременно?
Пытаюсь , но срабатывает только первый , второй не хочет
Я про loop :)

Каким образом можно включать и выключать определенную функцию.
То есть , как ее написать так , дабы ее можно было отключать.. ?
 

Cucumber

Участник
40
21
Привет. Возможно ли запускать несколько циклов одновременно?
Пытаюсь , но срабатывает только первый , второй не хочет
Я про loop :)

Каким образом можно включать и выключать определенную функцию.
То есть , как ее написать так , дабы ее можно было отключать.. ?
https://blast.hk/threads/20759/
 

darksoor

Известный
674
353
F1::
SendInput, {f6}Любой текст номер 1{Enter}
Sleep 2000
if (%peremennaya% = 0 to 9999999999 do){
SendInput, {f6}Любой текст 2{Enter}
}else If (Send, esc){
SendInput, {f6}Хм...{Enter}
}

return
---------------------------------------------------------------------------------

Подскажите, почему не работает и как нужно исправить?

И если знаете, как число "9999999999" заменить на "Бесконечность"

AutoHotKey:
if (peremennaya >= 0) {
   ; code
}

Привет. Возможно ли запускать несколько циклов одновременно?
Пытаюсь , но срабатывает только первый , второй не хочет
Я про loop :)

Каким образом можно включать и выключать определенную функцию.
То есть , как ее написать так , дабы ее можно было отключать.. ?

Можно, через SetTimer.
Примеры найдешь выше.
Документация на русском: http://ahk-wiki.ru/settimer
 

7jizzle

Участник
238
14
1 команда /fastrun - больше ничего не нужно. По это команде скрипт будет включать и выключать быстрый бег.}
return[/code]
Я сам исправил))

У меня есть простенький код. Как написать чтобы скрипт срабатывал если хп 50 и меньше? Я поставил ; где не знаю что писать. Благодарю!
Код:
#IfWinActive GTA:SA:MP
#Include SAMP.ahk
:?:/trka::
addChatMessage("{FFFFFF}ON ")
hp:=getPlayerHealth()
;if (hp < 50)
{
SendChat ("Привет")
}
return
 

Kev1H

Новичок
19
0
F1::
SendInput, {f6}Любой текст номер 1{Enter}
Sleep 2000
if (%peremennaya% >= 0){
SendInput, {f6}Любой текст 2{Enter}
}else If (Send, esc){
SendInput, {f6}Хм...{Enter}
}

return
---------------------------------------------------------------------------------

Подскажите, почему не работает, когда жму ESC, не пишет в чат строчку и как нужно исправить?
 

darksoor

Известный
674
353
У меня есть простенький код. Как написать чтобы скрипт срабатывал если хп 50 и меньше? Я поставил ; где не знаю что писать. Благодарю!
Код:
#IfWinActive GTA:SA:MP
#Include SAMP.ahk
:?:/trka::
addChatMessage("{FFFFFF}ON ")
hp:=getPlayerHealth()
;if (hp < 50)
{
SendChat ("Привет")
}
return

AutoHotKey:
#IfWinActive GTA:SA:MP
#Include SAMP.ahk

$~NumpadEnter::
$~Enter::
if (!isInChat()) || (isDialogOpen() && (getDialogStyle() == 1 || getDialogStyle() == 3))
   Return
Sleep 250
chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
if (chatInput == "/trka") {
   hp := !hp
   addChatMessage("{FFFFFF} " (hp ? "ON" : "OFF"))
   SetTimer, check_hp, % (hp ? 1000 : "off")
}
return

check_hp:
if (getPlayerHealth() < 50) {
   SendChat ("Привет")
}
return

F1::
SendInput, {f6}Любой текст номер 1{Enter}
Sleep 2000
if (%peremennaya% >= 0){
SendInput, {f6}Любой текст 2{Enter}
} else If (Send, esc){
SendInput, {f6}Хм...{Enter}
}
return
---------------------------------------------------------------------------------

Подскажите, почему не работает, когда жму ESC, не пишет в чат строчку и как нужно исправить?

Так не будет работать, потому что условие не верное.
KeyWait в помощь.

AutoHotKey:
F1::
SendInput, {f6}Любой текст номер 1{Enter}
Sleep 2000
if (peremennaya >= 0) {
   SendInput, {f6}Любой текст 2{Enter}
} else {
   KeyWait, ESC,  D T15 ; ждёт нажатие клавиши 15 секунд
   if (!ErrorLevel) {
      SendInput, {f6}Хм...{Enter}
   }
}
return
 
Последнее редактирование:

7jizzle

Участник
238
14
AutoHotKey:
#IfWinActive GTA:SA:MP
#Include SAMP.ahk

$~NumpadEnter::
$~Enter::
if (!isInChat()) || (isDialogOpen() && (getDialogStyle() == 1 || getDialogStyle() == 3))
   Return
Sleep 250
chatInput := readString(hGTA, dwSAMP + 0x12D8F8, 256)
if (chatInput == "/trka") {
   hp := !hp
   addChatMessage("{FFFFFF} " (hp ? "ON" : "OFF"))
   SetTimer, check_hp, % (hp ? 1000 : "off")
}
return

check_hp:
if (getPlayerHealth() < 50) {
   SendChat ("Привет")
}
return



Так не будет работать, потому что условие не верное.
KeyWait в помощь.

AutoHotKey:
F1::
SendInput, {f6}Любой текст номер 1{Enter}
Sleep 2000
if (peremennaya >= 0) {
   SendInput, {f6}Любой текст 2{Enter}
} else {
   KeyWait, ESC,  D T15 ; ждёт нажатие клавиши 15 секунд
   if (!ErrorLevel) {
      SendInput, {f6}Хм...{Enter}
   }
}
return



Ладно, я сам поработаю мозгами.