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

Kolya_Kortez

Участник
49
3
Наверное есть и другое решение твоей пробелемы, но лично я бы вводил не ник причина , а ид причина, и потом уже узнавать ник по ид. Ну и в регулировке читаешь цифры, потом остальное уже причину
(Надеюсь понял)
это фейк увольнение с организации, человек даже в игре может не находится)
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Свободен, можешь помочь с моим скриптом?
AutoHotKey:
Pause
Loop
{
    Send, {WheelDown}
    Sleep, 370
    Send, {WheelDown}
    Sleep, 370
    Send, {WheelDown}
    Sleep, 370
    Send, {WheelDown}
    Sleep, 370
    Send, {RButton}
    Sleep, 20
    MouseGetPos, X_Pos, Y_Pos
    MouseClick, Left, X_Pos - 10, Y_Pos
    Sleep, 26000 
}
return
F11::
Pause
return
 

Adam_Rockwell

Активный
143
25
Делать было как всегда нечего, решил написать скриптик, чтобы ставил ставку в казино рулетка (шанс 1 к 3) на серваке Samp-DM.

Принцип работы:
Если проигрыш, то ставка увеличивается в полтора раза. И так до тех пор, пока не выиграешь. В итоге после нескольких проигрышей подряд всё-таки наступает выигрыш, и мы всегда в плюсе на фиксированную сумму.

Код я значительно сократил, чтобы было удобней понять принцип работы. В общем... Спустя 15-20 минут работы - скрипт тупо аварийно завершает работу. (Работа ansi-32 была прекращена, что-то типо такого)
Вопрос. Почему? Как исправить?
C++:
#SingleInstance Force
#Persistent
#Include udf.ahk
#IfWinActive GTA:SA:MP

;=========================
global startmoney = 2 ; Начальная ставка.
global maxrate = 25000 ; Максимальная сумма ставки в казино.
;=========================
global step = 0

F11::
Rate(startmoney)
return

F12::
PrintLow("~g~Script Reload", "500")
Reload
Return
 
Rate(money)
{
    SendChat("/rulet")
    sleep 300
    SendInput {down 3}{enter}
    sleep 500
    SendInput %money%{enter}
    Loop 1000
    {
        if (RegExMatch(getChatLineEx(0), "Вы выиграли {FFFFFF}.*{FFFF00} На барабане:"))
        or (RegExMatch(getChatLineEx(1), "Вы выиграли {FFFFFF}.*{FFFF00} На барабане:"))
        or (RegExMatch(getChatLineEx(2), "Вы выиграли {FFFFFF}.*{FFFF00} На барабане:"))
        {
            money := startmoney
            step++
            break
        }
        else if (RegExMatch(getChatLineEx(0), "Вы проиграли! На барабане"))
             or (RegExMatch(getChatLineEx(1), "Вы проиграли! На барабане"))
             or (RegExMatch(getChatLineEx(2), "Вы проиграли! На барабане"))
        {
            money := Round(money*1.5)
            step++
            break
        }
    }
    addchatmessage("")
    addchatmessage("")
    addchatmessage("")
    addchatmessage(step)
    sleep 200
    Rate(money)
}

P.S: Могу ответить на вопросы по поводу любой строчки кода. (Вроде быдлокода сильного нет)
 

Adam_Rockwell

Активный
143
25
Хз, мб из-за переполнения памяти, ибо если изначально скрипт работает нормально, а спустя какое-то время вылетает, то я не знаю что тут ещё сказать

Как эту память высвободить? Мы же ничего не запоминаем, кроме step. (номера игры)
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Как эту память высвободить? Мы же ничего не запоминаем, кроме step. (номера игры)
Это не C++ чтобы контролировать все, даже кол-во занимаемых байтов переменой не можем определить.

Делать было как всегда нечего, решил написать скриптик, чтобы ставил ставку в казино рулетка (шанс 1 к 3) на серваке Samp-DM.

Принцип работы:
Если проигрыш, то ставка увеличивается в полтора раза. И так до тех пор, пока не выиграешь. В итоге после нескольких проигрышей подряд всё-таки наступает выигрыш, и мы всегда в плюсе на фиксированную сумму.

Код я значительно сократил, чтобы было удобней понять принцип работы. В общем... Спустя 15-20 минут работы - скрипт тупо аварийно завершает работу. (Работа ansi-32 была прекращена, что-то типо такого)
Вопрос. Почему? Как исправить?
C++:
#SingleInstance Force
#Persistent
#Include udf.ahk
#IfWinActive GTA:SA:MP

;=========================
global startmoney = 2 ; Начальная ставка.
global maxrate = 25000 ; Максимальная сумма ставки в казино.
;=========================
global step = 0

F11::
Rate(startmoney)
return

F12::
PrintLow("~g~Script Reload", "500")
Reload
Return
 
Rate(money)
{
    SendChat("/rulet")
    sleep 300
    SendInput {down 3}{enter}
    sleep 500
    SendInput %money%{enter}
    Loop 1000
    {
        if (RegExMatch(getChatLineEx(0), "Вы выиграли {FFFFFF}.*{FFFF00} На барабане:"))
        or (RegExMatch(getChatLineEx(1), "Вы выиграли {FFFFFF}.*{FFFF00} На барабане:"))
        or (RegExMatch(getChatLineEx(2), "Вы выиграли {FFFFFF}.*{FFFF00} На барабане:"))
        {
            money := startmoney
            step++
            break
        }
        else if (RegExMatch(getChatLineEx(0), "Вы проиграли! На барабане"))
             or (RegExMatch(getChatLineEx(1), "Вы проиграли! На барабане"))
             or (RegExMatch(getChatLineEx(2), "Вы проиграли! На барабане"))
        {
            money := Round(money*1.5)
            step++
            break
        }
    }
    addchatmessage("")
    addchatmessage("")
    addchatmessage("")
    addchatmessage(step)
    sleep 200
    Rate(money)
}

P.S: Могу ответить на вопросы по поводу любой строчки кода. (Вроде быдлокода сильного нет)
Зачем тут Loop 1000 ?
getChatLineEx(0) - возвращает последнюю строчку в чате, зачем чекать еще другие 2 строчки
 

StenMarsh

Новичок
29
2
Можете сделать скрипт, отправил доклад с поста, и после 9мин. скрипт в чат пишет "Через 1мин. нужно кинуть доклад". Т.е таймер 9мин. после отправки доклада
 

sswsx

Участник
65
6
Можете сделать скрипт, отправил доклад с поста, и после 9мин. скрипт в чат пишет "Через 1мин. нужно кинуть доклад". Т.е таймер 9мин. после отправки доклада
Цикл, который сначала отправит доклад, а потом каждые 9 минут будет сообщать тебе о том что через минуту скрипт кинет доклад, активация на клавишу 1
C++:
1:: ; Активация на клавишу 1
Loop
{
  SendChat(”СЮДА ПИШИ ДОКЛАД")
  Sleep 540000
  AddChatMessage("{FF00FF}[AHK] {FFFFFF}Через минуту будет доклад")
 Sleep 60000
}
Return

После того как ты сделал нужное кол-во докладов,скрипт нужно отключить
C++:
F11::                 ; Приостановка на F11.
  If not Stop
  {
    Stop := True
    Pause
  }
Return

F12::                 ; Возобновление на F12.
  If Stop
  {
    Stop := False
    Pause
  }
Return

Выключить скрипт на F11, возобновить работу после остановки на F12
Обязательно иметь SAMP UDF!
По желанию можно убрать {}
 
Последнее редактирование:

Adam_Rockwell

Активный
143
25
Это не C++ чтобы контролировать все, даже кол-во занимаемых байтов переменой не можем определить.


Зачем тут Loop 1000 ?
getChatLineEx(0) - возвращает последнюю строчку в чате, зачем чекать еще другие 2 строчки

Потому что в чате чёртов флуд от других игроков. И последнюю строку скрипт не всегда успевал взять.

Loop 1000, из-за того, что цикл начинает чекать последнюю строку в чате на доли секунды раньше, чем эта строка выходит.
 

TopMo3

Участник
121
7
Хочу создать для своей семьи подсказки, а именно.
Когда кто-то например пишет !khelp выдает, потом /k пишется автоматически без клавиш, от моего лица, доступные команды, потом другой человек/или тот же, пишет !fflood например, и флудит, то что я настроил по данной команде.
Буду благодарен.
 
Последнее редактирование:

Adam_Rockwell

Активный
143
25
Хочу создать для своей семьи подсказки, а именно.
Когда кто-то например пишет !khelp выдает, потом /k пишется автоматически без клавиш, от моего лица, доступные команды, потом другой человек/или тот же, пишет !fflood например, и флудит, то что я настроил по данной команде.
Буду благодарен.

Ну думаю по коду всё понятно. Если скрипт увидит в чате !help , то делает одно. Если !ewechototo , то что-то ещё.
Если надо сделать, чтобы реагировало конкретно на чат семьи, то добавь нужный цвет (Т.е конкретную форму выдачи сообщения в чат возьми из чат-лога)

C++:
SetTimer, ProstoMetka, On
return

ProstoMetka:
GetChatLine(0, Output)
if (!isDialogOpen() && RegExMatch(Output, "!help"))
{
   SendChat("/k Доступные команды: ...")
}
else (!isDialogOpen() && RegExMatch(Output, "!ewechototo"))
{
   SendChat("/k Ещё что-то.")
}
return
 
Последнее редактирование:

TopMo3

Участник
121
7
Ну думаю по коду всё понятно. Если скрипт увидит в чате !help , то делает одно. Если !ewechototo , то что-то ещё.
Если надо сделать, чтобы реагировало конкретно на чат семьи, то добавь нужный цвет (Т.е конкретную форму выдачи сообщения в чат возьми из чат-лога)

C++:
SetTimer, ProstoMetka, On
return

ProstoMetka:
GetChatLine(0, Output)
if (!isDialogOpen() && RegExMatch(Output, "!help"))
{
   SendChat("/k Доступные команды: ...")
}
else (!isDialogOpen() && RegExMatch(Output, "!ewechototo"))
{
   SendChat("/k Ещё что-то.")
}
return
А что делать если скрипт не запускается, нет ошибок, просто не запускается.