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

Revalto

Известный
531
225
Можете подсказать из-за чего не работает скрипт? И как его решить проблему.

Код:
{
    numpad0::
    NearIdCar := NearPlayerInCar(90)
    ModelName :=""
    if (NearIdCar >= 0)
    {
        ModelName := getTargetVehicleModelNameById(NearIdCar)
    }
    if ModelName !=
    {
        if (ModelName = "Coach") or (ModelName = "Bus")
        sendChat("/m Водитель автобуса, немедленно прижмитесь к обочине!")
        else if (ModelName = "Cabbie") or (ModelName = "Taxi")
        sendChat("/m Водитель такси, немедленно прижмитесь к обочине!")
        else if (ModelName = "Tanker") or (ModelName = "Linerunner")  or (ModelName = "Roadtrain")
        sendChat("/m Водитель грузовика, немедленно прижмитесь к обочине!")
        else if (ModelName = "PCJ-600") or (ModelName = "Faggio") or (ModelName = "Freeway") or (ModelName = "Sanchez") or (ModelName = "FCR-900") or (ModelName = "NRG-500") or (ModelName = "BF-400") or (ModelName = "Wayfarer")
        sendChat("/m Водитель мотоцикла " ModelName    " номер, немедленно прижмитесь к обочине!")
        else if (ModelName = "Quad")
        sendChat("/m Водитель квадроцикла " ModelName    " немедленно прижмитесь к обочине!")
        else
        sendChat("/m Водитель автомобиля " ModelName    " немедленно прижмитесь к обочине!"      
Return
    {
}
Наченем с того, что за { и } за пределами активаций?, Так же при использовании второй проверки, вы не внесли данные для проверки. Формат: if(проверка) { ;code }

Здравствуйте.
У меня такая вот просьба. Мне нужен AHK скрипт чтобы он писал в чат доклад, потом для МЕНЯ в чате появлялась надпись в чате " Нажмите F3 для следующего поста", и когда я жму появляется следующий доклад. Надеюсь понятно объяснил. Самому сделать не получилось, т.к. в AHK 0.Буду очень благодарен
Это выглядит как заказ. Не думаю, что есть желающие писать бесплатно...

Не могу разобраться, как оптимизировать две кнопки в диалоге UDF. Вот код, кнопки "Открыть" и "Закрыть", все мои старания приводили к тому, что "Закрыть" действовало как "Открыть", и "Открыть" как "Закрыть", единственным вариантом было просто поменять их местами. Но это неудобно и непривычно, "Открыть" всегда делают слева, поэтому хочу чтобы две кнопки адекватно работали.
Код:
checkdialogMenu:
if (isDialogButton1Selected() == 1)
{
  menu := 0
}
Код:
#include UDF_037.ahk ; UDF_037.ahk - это название  файла UDF

;=============================================
; Обнуление переменной при нажатии ESC и F6
;=============================================
~ESC::
~F6::
menu:=0
return

;=============================================
; Кнопки вызова диалогов
;=============================================
F3::
menu := 1
ShowDialog(2, "Диалог 1", "Первая`nВторая", "X")
return
F4::
menu := 2
ShowDialog(2, "Диалог с подменю", "Лекции`nПункт без доп. меню", "X")
return

~LButton::
Time := A_TickCount
while(isDialogOpen())
{
    if (A_TickCount - Time > 500)
    {
  Return
    }
}
checkdialogMenu:
if (isDialogButton1Selected() == 1)
{
    menu := 0
}
ifWinNotActive, GTA:SA:MP
{
    return
}

;=============================================
; Проверка на активное меню
;=============================================
if (menu == 1)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    addChatMessage("Выбрано: " line_text)
    return
}
else if (menu == 2)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    if (line_num == 1)
    {
  showDialog(2, "Подменю", "Первый пукнкт`nВторой пункт", "X")
  menu := 3
    }
    else if (line_num == 2)
  addChatMessage("Выбрано: " line_text)
    return
}
else if (menu == 3)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    addChatMessage("В подменю выбрано: " line_text)
    return
}
return

~Enter::
gosub, checkdialogMenu
return#include UDF_037.ahk ; UDF_037.ahk - это название  файла UDF

;=============================================
; Обнуление переменной при нажатии ESC и F6
;=============================================
~ESC::
~F6::
menu:=0
return

;=============================================
; Кнопки вызова диалогов
;=============================================
F3::
menu := 1
ShowDialog(2, "Диалог 1", "Первая`nВторая", "X")
return
F4::
menu := 2
ShowDialog(2, "Диалог с подменю", "Лекции`nПункт без доп. меню", "X")
return

~LButton::
Time := A_TickCount
while(isDialogOpen())
{
    if (A_TickCount - Time > 500)
    {
  Return
    }
}
checkdialogMenu:
if (isDialogButton1Selected() == 1)
{
    menu := 0
}
ifWinNotActive, GTA:SA:MP
{
    return
}

;=============================================
; Проверка на активное меню
;=============================================
if (menu == 1)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    addChatMessage("Выбрано: " line_text)
    return
}
else if (menu == 2)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    if (line_num == 1)
    {
  showDialog(2, "Подменю", "Первый пукнкт`nВторой пункт", "X")
  menu := 3
    }
    else if (line_num == 2)
  addChatMessage("Выбрано: " line_text)
    return
}
else if (menu == 3)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    addChatMessage("В подменю выбрано: " line_text)
    return
}
return

~Enter::
gosub, checkdialogMenu
return

Ребят такая проблема. Писал простой бинд для САМПа.
Было очень много ошибок, первый день с АХК, все исправил, кроме одной: Пишет: Unexpected "{"
Я не знаю с чём это может быть связано. При запуске АХК эта ошибка появляется в 3 строке.
А во 2 строке всё нормально. Помогите решить. Вот скрин.
Изображение загружено на фотохостинг Япикс(http://yapx.ru/v/BzrY1)
Не могу помочь, без предоставления кода. P.S. скрин удален.

Всем привет. Хочу сделать скрипт, который будет работать только у игрока с определенным ником. Как-то у меня был такой код, но я его потерял, кто может подсказать ?
Код:
if(getUsername() != "Samuel_Revalto")
     return
if (chatInput="/rre") || if (chatInput="/rre ")
{
{
Random, rrer, 0, 299
SendInput, {F6}/re %rrer%{Enter}
return
}
else
{
IfInString, A_LoopReadLine, [Ошибка] Вы ввели свой ID!
}
}
как сделать что бы при том когда в чат напишет: [Ошибка] Вы ввели свой ID!, команда повторилась и выбрала другого человека от 0 до 299?
Зачем вы 2 раза открываете скобки при if? Уже грубая ошибка. А так чекайте чат на наличии фразы и все.

Как сделат так что бы при вводе /лекции высвечевалося окошко во всеми лекциямикоторые я забиндил???
Не понял вопроса...
Код:
:?:/лекция::
ShowDialog(2, "Диалог с подменю", "Лекции`nПункт без доп. меню", "X")
return

Как сделать что бы нажатии к примеру на 1, в чат выводился текст, но после второго нажатия на 1, оно переставало действовать.
Код:
!1::
addChatMessage("{ffffff}[ {00afff}Проверка {ffffff}] Выбрано: {1fff00}нажмите 1.")
addChatMessage("{ffffff}[ {00afff}Проверка {ffffff}] Выбрано: {1fff00}нажмите 2.")
addChatMessage("{ffffff}[ {00afff}Проверка {ffffff}] Выбрано: {1fff00}нажмите 3.")
addChatMessage("{ffffff}[ {00afff}Проверка {ffffff}] Выбрано: {1fff00}нажмите 4.")
addChatMessage("{ffffff}[ {00afff}Проверка {ffffff}] Выбрано: {1fff00}нажмите 5.")
return
Зачем постоянно задавать вопрос, на который был уже ответ?
Код:
; для продолжения нажмите - 1, для отказа - 2
loop
{
if (getkeystate("1", "P"))
{
; действия
break
}
else if (getkeystate("2", "P"))
{
; вы нам не подходите..
return
}
}
; действия
P - это проверка на то, физически нажата клавиша или нет (сам нажал на клавиатуре или это сделал скрипт)
А D указывают обычно снизу и это значит, что клавиша нажата от слова "Down(вниз)". U - "Up(вверх)" например:
Код:
GetKeyState, state, sc2F, P
If state = D
    MsgBox, клавиша нажата
If state = U
    MsgBox, клавиша отпущена

Плохое решение учиться на готовых решениях. Может быть это и показатель, как надо писать код. Лучше пробовать самому с 0 используя документации! А если вам просто нужен готовый код и не желаете учить AHK, то идите сразу заказывайте скрипт...
 
Последнее редактирование модератором:
  • Нравится
Реакции: Harryss

Harryss

Участник
233
26
Код:
#include UDF_037.ahk ; UDF_037.ahk - это название  файла UDF

;=============================================
; Обнуление переменной при нажатии ESC и F6
;=============================================
~ESC::
~F6::
menu:=0
return

;=============================================
; Кнопки вызова диалогов
;=============================================
F3::
menu := 1
ShowDialog(2, "Диалог 1", "Первая`nВторая", "X")
return
F4::
menu := 2
ShowDialog(2, "Диалог с подменю", "Лекции`nПункт без доп. меню", "X")
return

~LButton::
Time := A_TickCount
while(isDialogOpen())
{
    if (A_TickCount - Time > 500)
    {
  Return
    }
}
checkdialogMenu:
if (isDialogButton1Selected() == 1)
{
    menu := 0
}
ifWinNotActive, GTA:SA:MP
{
    return
}

;=============================================
; Проверка на активное меню
;=============================================
if (menu == 1)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    addChatMessage("Выбрано: " line_text)
    return
}
else if (menu == 2)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    if (line_num == 1)
    {
  showDialog(2, "Подменю", "Первый пукнкт`nВторой пункт", "X")
  menu := 3
    }
    else if (line_num == 2)
  addChatMessage("Выбрано: " line_text)
    return
}
else if (menu == 3)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    addChatMessage("В подменю выбрано: " line_text)
    return
}
return

~Enter::
gosub, checkdialogMenu
return#include UDF_037.ahk ; UDF_037.ahk - это название  файла UDF

;=============================================
; Обнуление переменной при нажатии ESC и F6
;=============================================
~ESC::
~F6::
menu:=0
return

;=============================================
; Кнопки вызова диалогов
;=============================================
F3::
menu := 1
ShowDialog(2, "Диалог 1", "Первая`nВторая", "X")
return
F4::
menu := 2
ShowDialog(2, "Диалог с подменю", "Лекции`nПункт без доп. меню", "X")
return

~LButton::
Time := A_TickCount
while(isDialogOpen())
{
    if (A_TickCount - Time > 500)
    {
  Return
    }
}
checkdialogMenu:
if (isDialogButton1Selected() == 1)
{
    menu := 0
}
ifWinNotActive, GTA:SA:MP
{
    return
}

;=============================================
; Проверка на активное меню
;=============================================
if (menu == 1)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    addChatMessage("Выбрано: " line_text)
    return
}
else if (menu == 2)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    if (line_num == 1)
    {
  showDialog(2, "Подменю", "Первый пукнкт`nВторой пункт", "X")
  menu := 3
    }
    else if (line_num == 2)
  addChatMessage("Выбрано: " line_text)
    return
}
else if (menu == 3)
{
    menu := 0
    line_num  := getDialogLineNumber()
    line_text  := getDialogLine(line_num)

    addChatMessage("В подменю выбрано: " line_text)
    return
}
return

~Enter::
gosub, checkdialogMenu
return
Сможешь помочь, как занести ID игрока, по которому последний раз пробивали ПКМ в переменную? id := getIdByPed(getTargetPed())
При этой функции надо зажимать ПКМ и нажимать хоткей, ну у меня лично там автоотыгровка, а если я нажму ПКМ, отожму ее, а затем нажму хоткей то вместо ID выдаст число "-1". Как сделать, чтобы он запоминал последнего игрока?
 

Toopie

Новичок
29
2
Плохое решение учиться на готовых решениях. Может быть это и показатель, как надо писать код. Лучше пробовать самому с 0 используя документации! А если вам просто нужен готовый код и не желаете учить AHK, то идите сразу заказывайте скрипт...
ну тут ты фифти-фифти прав.
я в пхп 3 года и прошел middle аттестацию и скажу так
я учился не по документации, только посмотрел в оф документалке пару функций и пошел наяривать
и теперь я понимаю как именно работает та или иная функция, почему она так работает, лучше самому все осваивать и немного смотреть на чужие коды, чем читать документалку
 

Ashynja

Новичок
11
0
Как сделат продолжнение действия?
Например: ввел я в чат /медикаменты И мне отыгрует РП загрузку медикаментов,а после этого в чат писали типо "Для розгрузки медикаментов нажмите "1" "
 

Revalto

Известный
531
225
ну тут ты фифти-фифти прав.
я в пхп 3 года и прошел middle аттестацию и скажу так
я учился не по документации, только посмотрел в оф документалке пару функций и пошел наяривать
и теперь я понимаю как именно работает та или иная функция, почему она так работает, лучше самому все осваивать и немного смотреть на чужие коды, чем читать документалку
Я PHP выучил за 1-2 недели, уже имею по нему сертификат. Документации не обязательно читать, тебе достаточно знать, что значит функция. Примеры в документациях по использованию есть и этого достаточно.

Как сделат продолжнение действия?
Например: ввел я в чат /медикаменты И мне отыгрует РП загрузку медикаментов,а после этого в чат писали типо "Для розгрузки медикаментов нажмите "1" "
Выше отвечал на этот вопрос. Буквально через 2 комментария...
 

Ashynja

Новичок
11
0
Я PHP выучил за 1-2 недели, уже имею по нему сертификат. Документации не обязательно читать, тебе достаточно знать, что значит функция. Примеры в документациях по использованию есть и этого достаточно.


Выше отвечал на этот вопрос. Буквально через 2 комментария...
Так?
Код:
:?:/собес::
SendInput,{F6}Вы на собеседование?

; для продолжения нажмите - 1, для отказа - 2
loop
{
if (getkeystate("1", "P"))
{
; Отлично,покажите паспорт лицензии и мед карту!
break
}
else if (getkeystate("2", "P"))
{
; Кхем....
return
}
}
; Кхем.....
 

Arthur22

Новичок
11
1
Ashynja,
Код:
:?:/собес::
SendInput,{F6}Вы на собеседование?{ENTER}
; Продолжить - 1, прекратить - 2
Loop,
{
    if (getkeystate("1", "P"))
    {
        ; действия, если на собеседование.
        Return
    }
    else if (getkeystate("2", "P"))
    {
        ; действия, если отказались от собеседования.
        Return
    }
}
Return
И господи, как вы без табуляции умудряетесь писать? Это невыносимо читать.
 

Revalto

Известный
531
225
Ashynja,
Код:
:?:/собес::
SendInput,{F6}Вы на собеседование?{ENTER}
; Продолжить - 1, прекратить - 2
Loop,
{
    if (getkeystate("1", "P"))
    {
        ; действия, если на собеседование.
        Return
    }
    else if (getkeystate("2", "P"))
    {
        ; действия, если отказались от собеседования.
        Return
    }
}
Return
И господи, как вы без табуляции умудряетесь писать? Это невыносимо читать.

Сбивается при копировании :D

Код:
:?:/собес::
SendChat("Вы на собеседование?")
addChatMessageEx("FFFFFF", "[Помощь]: Для продолжения нажмите \"1\", для отказа \"2\"")
; Продолжить - 1, прекратить - 2
Loop,
{
    if (getkeystate("1", "P"))
    {
        ; действия, если на собеседование.
        Return
    }
    else if (getkeystate("2", "P"))
    {
        ; действия, если отказались от собеседования.
        Return
    }
}
Return

Не вижу смысла использовать SendInput/Send, когда в UDF есть SendChat, более удобнее. Так же не забываем про важную функцию addChatMessage/addChatMessageEx :D

А вообще, loop юзать плохо, хоть и я дал код :D
 

Andy Dezparez

Новичок
2
0
Здравствуйте,мне нужна помощь. Я пишу свой AHK для самп. Уже нарисовал GUI,и незнаю как сделать функцию: когда в GUI выбираешь кнопку на которую должна активироваться сама команда,вообщем как не странно она должна активироваться. Я могу создать только бинд команду либо же бинд кнопки. Помогите пожалуйста.
 

Revalto

Известный
531
225
Здравствуйте,мне нужна помощь. Я пишу свой AHK для самп. Уже нарисовал GUI,и незнаю как сделать функцию: когда в GUI выбираешь кнопку на которую должна активироваться сама команда,вообщем как не странно она должна активироваться. Я могу создать только бинд команду либо же бинд кнопки. Помогите пожалуйста.
Код:
Gui, Add, Button, x12 y10 w100 h30 gTest, Кнопка
Gui, Show, w131 h59, Revalto Jly4wiu
return

Test:
act := !act
MsgBox % (act ? "Активирован":"Выключен")
return

GuiClose:
ExitApp
 

lisaotsosa772

Новичок
3
0
Я немного тупой, но можете мне объяснить две вещи:
1) Что такое PED-id?
2) Почему при

id := getClosestPlayerId()
Sendinput, {F6}/skin %id%{enter}


мне выдаёт, что ID равен "-1" ?
 

Arthur22

Новичок
11
1
Я немного тупой, но можете мне объяснить две вещи:
1) Что такое PED-id?
2) Почему при

id := getClosestPlayerId()
Sendinput, {F6}/skin %id%{enter}


мне выдаёт, что ID равен "-1" ?
Рядом с тобой были игроки, когда ты проверял это? Если да, то попробуй кодировку ansi-32 выставить.
 

Chase_Querttez

Новичок
2
0
Доброго времени суток, юзеры.
Все мы знаем старые-добрые чит-коды для гта, которые вводятся на клавиатуре.
У меня возник вопрос, как мне сделать такой же ввод на клавиатуре, чтобы отыгрывались мои комманды.
Например, ввожу на клавиатуре слово G U N, после ввода у меня отыгрвается дигл.
Не предлагать делать скрипт через 1 & 2.
Мне нужно, чтобы я набирал по очереди буквы и скрипт заработал.
 
Последнее редактирование: