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

Dexide

Новичок
45
1
vk11::
targerEnemy := getClosestPlayerId()
if (getDist(getCoordinates(), getPlayerPosById(targerEnemy)) < 2.8)
{
SendChat("/команда " targerEnemy)
}
return


; vk11 - кнопка
; не забудь подключить самп удф
; 2.8 расстояние от ближнего персонажа ( на котором будет вводится команда и ид)
 

RTD

Нестандартное звание
Модератор
391
413
Выбивает ошибка Unexpected "}" помогите что тут не так?
Код:
#Include samp.ahk

F2::
Showdialog("1", "{FFFAFA}Выберите пункт", "{FFFAFA}[1] - RolePlay`n[2] - Лекции`n[3] - Наказание", "Ok")
input, text, V, {Enter}
Keywait, Enter, D
sleep 300

if (text = 1) {
Showdialog("1", "{FFFAFA}Выберите пункт", "[1]RolePlay`n[2]RolePlay`n[3]RolePlay`n[4]RolePlay`n[5]RolePlay`n[6]RolePlay`n[7]RolePlay`n[8]RolePlay`n[9]RolePlay", "Ok")
} else if (text = 2) {
addchatmessage("{FFFAFA}Привет")
sleep 1100
addchatmessage("Добрый день")
sleep 1100 }
addchatmessage ("/invite")
} else if (text = 3) {
addchatmessage ("/invite")
} else {
addChatMessage("[AHK]: Ошибка. Выберите пункт с помощью цифр 1-3"
}
return
Строки 15 и 20 смотри...
 

Tanaka

Участник
41
10
Такая проблема, есть два скрипта. Но при запуске пишет, что тип две разные команды на одной клавише. Помогите совместить, надеюсь поняли, что хочу сделать.
Зачем один и тот же код на 2 команды?
C++:
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance, Force
#Include, SUD.ahk


CommandProcessor := new CommandProcessor()
CommandProcessor.SetStatusProcessor(true)

CommandProcessor.RegisterCommand("/lic", "Lic")
CommandProcessor.RegisterCommand("/lis", "Lis")
return

Lic:

Nick := getPlayerNameById(CommandProcessor.TempText)
Nick := RegExReplace(Nick, "_", " ")

SendChat("/me достал чистый бланк для лицензий")
Sleep 4000
SendChat("/me заполнил бланк по паспортным данным: " Nick)
Sleep 3000
SendChat("/do в бланке стоит печать: ''With love from Driving School'' ")
Sleep 2000
SendChat("/do Лицензия оформлена на имя: " Nick)
Sleep 1100
SendChat("/givelicense " CommanProcessor.TempText)
return

Lis:

Nick := getPlayerNameById(CommandProcessor.TempText)
Nick := RegExReplace(Nick, "_", " ")

SendChat("/do На плече сумка с документами ")
Sleep 3000
SendChat("/me достал из сумки чистый бланк для лицензий ")
Sleep 4500
SendChat("/me заполнил бланк по паспортным данным: " Nick)
Sleep 3000
SendChat("/do в бланке стоит печать: ''With love from Driving School''")
Sleep 2000
SendChat("/do Лицензия оформлена на имя: " Nick)
Sleep 1100
SendChat("/givelicense " CommandProcessor.TempText)
return

#Include, CP.ahk

C++:
/*
    Разработчик: Александр Тумаш (tumkin)
    Компания: Tumkin Project
    Спонсор: cheat-master.ru
 
    CommandProcessor := new CommandProcessor()
    CommandProcessor.SetStatusProcessor(true)
    CommandProcessor.RegisterCommand("/mycmd", "cmdMyCMD")
    Msgbox % "Текст после команды: " CommandProcessor.TempText
    Msgbox % "Команда которую мы ввели: "CommandProcessor.TempCmd
 
    Данные строки не рекомендуется удалять, дабы соблюдать авторские права.
    v0.1
*/

class CommandProcessor {
    StatusProcessor := false
    CommandArray := {}
 
    TempText := ""
    TempCmd := ""
 
    SetStatusProcessor(status) {
        this.StatusProcessor := status
    }
 
    RegisterCommand(cmd, metka) {
        ObjRawSet(this.CommandArray, cmd, metka)
    }
 
    DeleteCommand(cmd) {
        this.CommandArray.Delete(cmd)
    }
}

~Enter::
if(CommandProcessor.StatusProcessor) {
    if(IsChatActive()) {
        if(isDialogOpen())
            return
     
        blockChatInput()
        while(IsChatActive())
            continue
     
        unBlockChatInput()
     
        TextChat := GetChatText()
     
        if(SubStr(TextChat, 1, 1) = "/") { ; Определено что введена команда
            InputCMD := StrSplit(TextChat, A_Space)
            InputCMD := InputCMD[1]
            CommandProcessor.TempCmd  := InputCMD
            RegExMatch(TextChat, "^\/\w+\s(.*)", var)
            CommandProcessor.TempText := var1
         
            if(CommandProcessor.CommandArray.HasKey(InputCMD)) { ; Если команда определена в скрипте
                ClearTextDialog()
                SetTimer, % CommandProcessor.CommandArray[InputCMD], -1
            } else { ; Если команда не определена
                SendChat(TextChat)
                ClearTextDialog()
            }
        } else { ; Определено что вводиться обычный текст
            if(TextChat != "") {
                CommandProcessor.TempText := TextChat
                SendChat(TextChat)
                ClearTextDialog()
            }
        }
    }
}
return
P.S SUD.txt переименовать в .ahk
 

Вложения

  • SUD.txt
    221.3 KB · Просмотры: 14
Последнее редактирование:

Pakulichev

Software Developer & System Administrator
Друг
1,789
2,130
Добрый день, форумчане. Возможно есть те у кого возникает проблема при использовании Samp UDF. А именно при попытке получить свой ID по следующему коды вы получите ответ: "-1".

Код:
F2::
pid:= getPlayerIdByName(getUsername())
AddChatMessage("Ваш ID: " pid)
Return

А при попытки получить cам nickname вы получаете пустую строку, а то есть такой код тоже не работает:

Код:
F2::
pid:= getPlayerIdByName(getUsername())
pname = getUsername()
AddChatMessage("Ваш ID: " pid " | " pname)
Return

UDF подключен, AHK запущен от имени администратора. Помогите решить проблему. Буду благодарен =)
 

Tiva

Известный
76
1
Строки 15 и 20 смотри...
Исправил все равно не работает)
Код:
#Include samp.ahk

F2::
Showdialog("1", "{FFFAFA}Выберите пункт", "{FFFAFA}[1] - RolePlay`n[2] - Лекции`n[3] - Наказание", "Ok")
input, text, V, {Enter}
Keywait, Enter, D
sleep 300

if (text = 1) {
Showdialog("1", "{FFFAFA}Выберите пункт", "[1]RolePlay`n[2]RolePlay`n[3]RolePlay`n[4]RolePlay`n[5]RolePlay`n[6]RolePlay`n[7]RolePlay`n[8]RolePlay`n[9]RolePlay", "Ok")
} else if (text = 2) {
SendChat("{FFFAFA}Привет")
sleep 1100
SendChat("Добрый день")
} sleep 1100 {
SendChat("/invite")
} else if (text = 3) {
SendChat("/invite")
} else {
addChatMessage("[AHK]: Ошибка. Выберите пункт с помощью цифр 1-3")
}
return
 

RTD

Нестандартное звание
Модератор
391
413
Исправил все равно не работает)
Код:
#Include samp.ahk

F2::
Showdialog("1", "{FFFAFA}Выберите пункт", "{FFFAFA}[1] - RolePlay`n[2] - Лекции`n[3] - Наказание", "Ok")
input, text, V, {Enter}
Keywait, Enter, D
sleep 300

if (text = 1) {
Showdialog("1", "{FFFAFA}Выберите пункт", "[1]RolePlay`n[2]RolePlay`n[3]RolePlay`n[4]RolePlay`n[5]RolePlay`n[6]RolePlay`n[7]RolePlay`n[8]RolePlay`n[9]RolePlay", "Ok")
} else if (text = 2) {
SendChat("{FFFAFA}Привет")
sleep 1100
SendChat("Добрый день")
} sleep 1100 {
SendChat("/invite")
} else if (text = 3) {
SendChat("/invite")
} else {
addChatMessage("[AHK]: Ошибка. Выберите пункт с помощью цифр 1-3")
}
return
Это не исправил, а сделал еще хуже...
 

RTD

Нестандартное звание
Модератор
391
413
Такая проблема, есть два скрипта. Но при запуске пишет, что тип две разные команды на одной клавише. Помогите совместить, надеюсь поняли, что хочу сделать.
$~Enter::
if (isInChat() && !isDialogOpen())
{
Sleep, 200
dwAddress := dwSAMP + 0x12D8F8
chatText := readString(hGTA, dwAddress, 256)
if (RegExMatch(chatText, "^\/lic (.*)", var))
{
Nick := RegExReplace(getPlayerNameById(var1), "_", " ")
Sleep 2500
SendChat("/me достал чистый бланк для лицензий ")
Sleep 4000
SendChat("/me заполнил бланк по паспортным данным: " Nick " ")
Sleep 3000
SendChat("/do в бланке стоит печать: ''With love from Driving School'' ")
Sleep 2000
SendChat("/do Лицензия оформлена на имя: " Nick " ")
Sleep 1100
SendChat("/givelicense " var1 )
}
}
Return

$~Enter::
if (isInChat() && !isDialogOpen())
{
Sleep, 200
dwAddress := dwSAMP + 0x12D8F8
chatText := readString(hGTA, dwAddress, 256)
if (RegExMatch(chatText, "^\/lis (.*)", var))
{
Nick := RegExReplace(getPlayerNameById(var1), "_", " ")
Sleep 1100
SendChat("/do На плече сумка с документами ")
Sleep 3000
SendChat("/me достал из сумки чистый бланк для лицензий ")
Sleep 4500
SendChat("/me заполнил бланк по паспортным данным: " Nick " ")
Sleep 3000
SendChat("/do в бланке стоит печать: ''With love from Driving School'' ")
Sleep 2000
SendChat("/do Лицензия оформлена на имя: " Nick " ")
Sleep 1100
SendChat("/givelicense " var1 )
}
}
Return
Код:
$~Enter::
if (isInChat() && !isDialogOpen()) {
    Sleep, 200
    dwAddress := dwSAMP + 0x12D8F8
    chatText  := readString(hGTA, dwAddress, 256)
    if (RegExMatch(chatText, "^\/lic (.*)", var)) {
        Nick := RegExReplace(getPlayerNameById(var1), "_", " ")
        Sleep 2500
        SendChat("/me достал чистый бланк для лицензий ")
        Sleep 4000
        SendChat("/me заполнил бланк по паспортным данным: " Nick " ")
        Sleep 3000
        SendChat("/do в бланке стоит печать: ''With love from Driving School'' ")
        Sleep 2000
        SendChat("/do Лицензия оформлена на имя: " Nick "  ")
        Sleep 1100
        SendChat("/givelicense " var1 )
    }else if (RegExMatch(chatText, "^\/lis (.*)", var)) {
        Nick := RegExReplace(getPlayerNameById(var1), "_", " ")
        Sleep 1100
        SendChat("/do На плече сумка с документами ")
        Sleep 3000
        SendChat("/me достал из сумки чистый бланк для лицензий ")
        Sleep 4500
        SendChat("/me заполнил бланк по паспортным данным: " Nick " ")
        Sleep 3000
        SendChat("/do в бланке стоит печать: ''With love from Driving School'' ")
        Sleep 2000
        SendChat("/do Лицензия оформлена на имя: " Nick "  ")
        Sleep 1100
        SendChat("/givelicense " var1 )
    }
}
Return
 

JEEMBО

Известный
Друг
1,240
581
Напишите пример кода для автоответчика в sms samp
Код:
way = %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt

!1::
FileDelete, %way%
Loop
{
   FileRead, file, %way%
   IfInString, file, ]: {FFCD00}
   {
    RegExMatch(file, "\w*\[([0-9]*)\]: {FFCD00}", var)
    SendInput, {f6}/sms %var1% Здравствуйте{enter}
    FileDelete, %way%
   }
}
return

Или так
Код:
FileCLog:=% A_MyDocuments "\GTA San Andreas User Files\SAMP\chatlog.txt"

loop
{

lastline := GetNewLine(FileCLog)

If lastline contains привет,здрав,здаров
{
RegExMatch(lastline, "i).*\[([0-9]*)\]: \{FFCD00\}.*", idPl)
Sendinput {F6}/sms %idPl1% Здравствуйте{ENTER}
}

}

GetNewLine(filename)
{ ;функция чтения последней строки, если файл изменен каждыее 100 мс
static old
static new
if !old
{
FileGetSize, old, %filename%
new := old
}
while old = new
{
sleep 100
FileGetSize, new, %filename%
}
old := new
Loop, read, %filename%
if A_LoopReadLine
{
last := A_LoopReadLine ;последняя строка
}
return last
}
 
Последнее редактирование модератором:

Sadriev12

Новичок
10
0
Помогите, когда нажимаю ALT+4, то вводиться первые 2-3 сообщения, а потом игра переходит в оконный режим. Что делать ?

Код:
!4::
SendInput, {F6}Сэр, пожалуйста, ведите себя адекватно ..{Enter}
Sleep, 1000 ;
SendInput, {F6}...Ведь ваша неадекватность к хорошему не приведет...{Enter}
Sleep, 1000 ;
SendInput, {F6}.. в ином случае мне придется применить к вам силу ...{Enter}
Sleep, 1000 ;
SendInput, {F6}... и вывести из здания банка!{Enter}
SendInput, {F6}/me грозно взглянув на нарушителя покоя{Enter}
Return
 

Tiva

Известный
76
1
Сделал свой скрипт. после чего захожу в сам самп нажимаю F2 - активация и у меня происходят лаги после чего игра полностью крашит.
 

JEEMBО

Известный
Друг
1,240
581
Сделал свой скрипт. после чего захожу в сам самп нажимаю F2 - активация и у меня происходят лаги после чего игра полностью крашит.
Ну так ты может код предоставишь или мы все тут на битве экстрасенсов?
 
  • Нравится
Реакции: Dr_lesbow и user116675