SetTitleMatchMode, 2 SetKeyDelay, 30, 50 #SingleInstance force stdout := FileOpen("*", "w") TabArray:=[] counter:=1 lastLine:=blank isPaused:=False Gui, New, hwndhGui AlwaysOnTop Resize MinSize Gui, Add, Text,section w150, Nom's Chat bot Gui, Add, Text,w150, F1 to set target Gui, Add, Text,w120 vCtrl_Title, blank Gui, Add, Text,, Please enter text: Gui, Add, Edit, R3 vTextInput w135 Gui, Add, Text,w120 vCtrl_Text, blank Gui, Add, Button, gAddLine w135, Add text Gui, Add, Text,, Chat delay (ms) Gui, Add, Edit Gui, Add, UpDown, vChatDelay Range1-50000, 10000 Gui, Add, Text,, Letter delay (ms) Gui, Add, Edit Gui, Add, UpDown, vLetterDelay Range1-50000, 200 Gui, Add, Button, gTextSpam w135, Start Gui, Add, Button, gPauseit w135 vPauseButton, Pause Gui, Show,, www.patreon.com/nomscripts SetTimer, Update, 250 return Update: UpdateText("Ctrl_Text", "Last line: " lastLine) return TextSpam: global counter Gui, Submit, Nohide Loop { if (isPaused) { continue } Sleep rand_range(20,50) BlockInput Send Loop, Parse, % lastLine { ControlSendRaw,JagOpenGLView1,%A_LoopField%,% "ahk_id " target Sleep rand_range(LetterDelay,LetterDelay+50) } Sleep rand_range(20,50) ControlSend,JagOpenGLView1,{Enter},% "ahk_id " target Sleep rand_range(ChatDelay,ChatDelay+300) } return F1:: global target WinGet, xd, ID, A target := xd UpdateText("Ctrl_Title", "Target window: " target) return AddLine: global TextInput,target,lastLine GuiControlGet NextString,,TextInput lastLine := NextString Gui, Add, Text,w150, %target% : %lastLine% GuiControl ,,TextInput return Pauseit: isPaused := isPaused ? false : true UpdateText("PauseButton", isPaused ? "Resume" : "Pause") return getWindowsList() { myString := "" WinGet, winList, List, ahk_class JagWindow Loop % winList { myString .= winList%a_index% myString .= " " } return myString } HexToDec(Hex) { if (InStr(Hex, "0x") != 1) Hex := "0x" Hex return, Hex + 0 } Concatente2(x, y) { Return, x y } rand(range=5) { Random, r, -range, range return r } rand_range(min, max) { Random, r, min, max return r } UpdateText(ControlID, NewText) { ; Unlike using a pure GuiControl, this function causes the text of the ; controls to be updated only when the text has changed, preventing periodic ; flickering (especially on older systems). static OldText := {} global hGui if (OldText[ControlID] != NewText) { GuiControl, %hGui%:, % ControlID, % NewText OldText[ControlID] := NewText } } HasVal(haystack, needle) { if !(IsObject(haystack)) || (haystack.Length() = 0) return 0 for index, value in haystack if (value = needle) return index return 0 } ObjIndexOf(ByRef obj, item, case_sensitive:=false) { mycount := 1 for i, val in obj { mycount++ if (case_sensitive ? (val == item) : (val = item)) return mycount } return 2 } GuiClose: ExitApp