0

我正在使用 AutoHotKey 程序,并且我有一个脚本可以监视某个像素及其颜色,如果它发生变化,它会做一些事情使颜色变回原样。因此,假设它正在查看像素 100、100,并且颜色为 0xFFFFFF,如果颜色更改为 0xFFFFFF 以外的任何颜色,则脚本将按下数字 5 键,然后返回 0xFFFFFF。这非常有效,现在我在这里的目的是帮助获取一个脚本来监控两个 x、y 位置和两种单独的颜色,并使用两个不同的键将所述颜色更改回被监控的颜色。该脚本主要用于玩在线电脑游戏,如 Ragnarok Online 或 WoW。

这是监控 ONE x,y 和 ONE 颜色的代码

#Persistent 
CoordMode, Pixel, Relative 

X := 100
Y := 100
SetColor := 0xC48559

SetTimer, WatchLife, 100
Return

WatchLife: 
Pixelgetcolor, Color, %X%, %Y%
if (Color = SetColor)
    Return 
    Else 
  Send, 5
  Sleep 20
Return

这个脚本会监视血条,当它低于某个区域时,它会自动按数字 5 键来使用血药来恢复血条。这对游戏玩家有很大帮助,因此他们不必过多关注自己的生命值,而更多地专注于攻击玩家或怪物。

现在我需要一种方法让一个脚本执行两次,AutoHotKey 程序不允许重复某些行,因此您不能在一个脚本中复制粘贴两次,是的,您可以通过更改来使用此脚本两次x,y 和颜色代码,但是一次运行多个脚本可能会与其他脚本混淆,我已经看到这种情况发生并且在我使用另一个脚本运行此脚本时发生过几次。

我试过这段代码;

#Persistent 
CoordMode, Pixel, Relative 

X := 100
Y := 100
SetColor := 0xC48559

X := 100
Y := 80
SetColor := 0xF0DED7

SetTimer, WatchLife, 100
Return

WatchLife: 
Pixelgetcolor, 0xC48559, 100, 100
if (Color = SetColor)
   Return 
Else 
   Send, 5
   Sleep 20
Pixelgetcolor, 0xF0DED7, 100, 80
if (Color = SetColor)
   Return 
Else 
   Send, 6
   Sleep 20
Return

我认为这会起作用,但是当像素中的颜色存在时,它只会将 HP 和 MP 的治疗项目的键发送到垃圾邮件中。我在 AutoHotKey 的主网站和论坛上进行了搜索,但我没有看到任何关于拥有此脚本的信息。

请帮忙,这个脚本可以帮助任何玩类似于 WoW 或 Ragnarok Online 的在线电脑游戏的人。

4

2 回答 2

1

这个怎么样。我修改了第一个脚本,以便可以在我的环境中对其进行测试。

您生成了大量发送指令,因为您没有定义 PixelGetColor 应存储的变量,因此 If 语句始终为 false。您在第一个 If 之后也有一个返回,因此仅当第一个 If 为假时才执行第二个 If(这是您的脚本中的情况,但不应该如此)。

Persistent 
CoordMode, Pixel, Relative 

X1 := 200
Y1 := 200
SetColor1 := 0x999999

X2 := 200
Y2 := 1000
SetColor2 := 0xFFFFFF

SetTimer, WatchLife, 500
Return

WatchLife:
    Pixelgetcolor, Color, %X1%, %Y1%
    if (Color <> SetColor1)
        SoundBeep, 500, 200
    Pixelgetcolor, Color, %X2%, %Y2%
    if (Color <> SetColor2)
        SoundBeep, 1000, 200
Return

如果您想在发送击键后等待,那么您应该在 If 语句中包含等待,就像这样。

Persistent 
CoordMode, Pixel, Relative 

X1 := 100
Y1 := 100
SetColor1 := 0xC48559

X2 := 100
Y2 := 80
SetColor2 := 0xF0DED7

SetTimer, WatchLife, 500
Return

WatchLife:
    Pixelgetcolor, Color, %X1%, %Y1%
    if (Color <> SetColor1)
    {
        Send, 5
        Sleep, 20
    }
    Pixelgetcolor, Color, %X2%, %Y2%
    if (Color <> SetColor2)
    {
        Send, 6
        Sleep, 20
    }
Return
于 2013-03-15T11:58:36.897 回答
1

你可以先试试这个。打开记事本(白色背景)并最小化所有其他应用程序(仅桌面)。移动记事本窗口,使空白区域位于两个鼠标位置中的任何一个之上、两个鼠标位置之上或两个鼠标位置之一之上。您可以使用Ctrl+退出q,因为您不能真正使用鼠标退出 AHK。

根据具体情况,您不会听到哔声,只有一声哔声(高或低)或两声哔声(高和低)。鼠标将指向像素所在的位置。

#Persistent 
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen 

X1 := 100
Y1 := 100
SetColor1 := 0xFFFFFF

X2 := 600
Y2 := 100
SetColor2 := 0xFFFFFF

SetTimer, WatchLife, 6000
Return

WatchLife:
    MouseMove, %X1%, %Y1%
    Pixelgetcolor, Color, %X1%, %Y1%
    TrayTip,, %Color%
    if (Color <> SetColor1)
    {
        SoundBeep, 500, 200
    }
    Sleep, 1000
    MouseMove, %X2%, %Y2%
    Pixelgetcolor, Color, %X2%, %Y2%
    TrayTip,, %Color%
    if (Color <> SetColor2)
    {
        SoundBeep, 1000, 200
    }
Return


^q::
ExitApp
于 2013-03-15T14:14:24.850 回答