用溪流 WarKey 辅助红警开局快捷操作


2023年01月19日 09:01 溪流

背景

自从发现红警出了 ddraw 补丁可以在最新的系统里玩后,就开始怀旧了。但是由于手残,遇到别人抢地盘基本上直接崩了。偶然有一次发现像 08 这样的高手点 30 个坦克使用工具的。那么,我开局用工具造兵营、碉堡,是不是显得不那么可耻了呢?

说干就干,我有支持 lua 脚本的溪流 WayKey,理论上都能做到。

实现一次性点 30 个坦克

这个场景没有手速要求,只是为了不麻烦,所以我们实现地简单些:要求先把鼠标放好位置,然后设定快捷键,直接给点击 N 次。

实现很简单,30 次这个次数作为参数传进来,主函数里就是 PressMouseButton(Mouse.LBUTTON)ReleaseMouseButton(Mouse.LBUTTON) 来 30 下:

 1Extension =
 2{
 3    Application   = "xlWarKey",
 4    Version       = "3.0",
 5    NameSpace     = "http://www.streamlet.org/Software/xlWarKey/",
 6
 7    ExtensionName = "鼠标连点",
 8    Author        = "溪流",
 9    Description   = "该脚本可以用来在红警2中一次性造多个单位。",
10
11    Configuration =
12    {
13        Count    =
14        {
15            Type  = "number",
16            Desc  = "连点次数"
17        }
18    },
19
20    Entrance      = function (id)
21
22        local config = Extension.Configuration;
23        --config.Count 就是用户在软件界面上设置的连点次数
24
25        for i = 1, config.Count, 1
26        do 
27            PressMouseButton(Mouse.LBUTTON);
28            ReleaseMouseButton(Mouse.LBUTTON);
29        end
30
31        return true;
32    end
33};

(脚本文档见 https://xlwarkey.streamlet.org/extension/samples

保存为 .lua 文件放到溪流 WarKey 目录下的 Scripts 下,退出溪流 WarKey 重新打开,即可看到脚本生效。

因为溪流 WarKey 本是为魔兽写的,因此默认会勾上“仅在魔兽争霸中应用”,要去掉它。

然后改键动作选择“鼠标连点”脚本,并配置参数 Count 为 30 即可:

实现快速造兵营、碉堡

难点主要是在定位按钮的位置。

我们在不同分辨率下截几张图,发现一个规律:不管分辨率如何,面板宽度总是固定为 168 像素,面板内部的各个组件大小也是固定的。这就好办了。经过测量,得出如下结论:

所以,对于第 r 行、第 c 列(r、c 均从 0 开始)的按钮,其中心坐标的计算公式为

x = WIDTH - 168 + 20 + 63 * c + 63/2
y = 227 + r * 50 + 50/2

点击面板按钮可以组织成一个函数:

 1ClickPanel = function(row, column, count)
 2    if count == nil then
 3        count = 1
 4    end
 5    local width, height = GetClientSize()
 6    local target_x = width - 168 + 20 + 63 * column + 32
 7    local target_y = 227 + row * 50 + 25
 8    MoveMouse(target_x, target_y)
 9    for i = 1, count, 1
10    do 
11        ClickMouse()
12        Delay(10)
13    end
14end

有了 ClickPanel,我们可以写出造任何东西的代码了。完整脚本如下:

 1Extension =
 2{
 3    Application   = "xlWarKey",
 4    Version       = "3.0",
 5    NameSpace     = "http://www.streamlet.org/Software/xlWarKey/",
 6
 7    ExtensionName = "红警开局快速操作",
 8    Author        = "溪流",
 9    Description   = "帮助红警手残党不要一开始就被抢死,提高游戏体验",
10
11    Configuration =
12    {
13        Type =
14        {
15            Type  = "number",
16            Desc  = "1=造电厂,2=造兵营,3=造矿场,4=造碉堡,5=造3条狗,6=造10个兵"
17        }
18    },
19
20    Entrance = function (id)
21
22        ClickKey = function (key)
23            PressKey(key)
24            ReleaseKey(key)
25        end
26
27        ClickMouse = function ()
28            PressMouseButton(Mouse.LBUTTON)
29            ReleaseMouseButton(Mouse.LBUTTON)
30        end
31
32        ClickPanel = function(row, column, count)
33            if count == nil then
34                count = 1
35            end
36            local width, height = GetClientSize()
37            -- 红警面板总是在右侧固定宽度位置 168 像素,其中
38            -- 内边框左侧 20 像素,右侧 22 像素,中间 126 像素为按钮,分两列,每列 63px
39            -- 顶部到按钮高度 227 像素,按钮高度 50 像素
40            local target_x = width - 168 + 20 + 63 * column + 32
41            local target_y = 227 + row * 50 + 25
42            MoveMouse(target_x, target_y)
43            for i = 1, count, 1
44            do 
45                ClickMouse()
46                Delay(10)
47            end
48        end
49
50        local config = Extension.Configuration
51        local start_x, start_y = GetCursorPosition()
52
53        if config.Type == 1 then
54            -- 造电厂
55            ClickKey(Keys.VK_Q)
56            ClickPanel(0, 0)
57            MoveMouse(start_x, start_y)
58        elseif config.Type == 2 then
59            -- 造兵营
60            ClickKey(Keys.VK_Q)
61            ClickPanel(1, 0)
62            MoveMouse(start_x, start_y)
63        elseif config.Type == 3 then
64            -- 造矿场
65            ClickKey(Keys.VK_Q)
66            ClickPanel(0, 1)
67            MoveMouse(start_x, start_y)
68        elseif config.Type == 4 then
69            -- 造碉堡
70            ClickKey(Keys.VK_W)
71            ClickPanel(0, 1)
72            MoveMouse(start_x, start_y)
73        elseif config.Type == 5 then
74            -- 造3条狗
75            ClickKey(Keys.VK_Q)
76            ClickPanel(1, 0, 3)
77            MoveMouse(start_x, start_y)
78        elseif config.Type == 6 then
79            -- 造10个兵
80            ClickKey(Keys.VK_Q)
81            ClickPanel(0, 0, 10)
82            MoveMouse(start_x, start_y)
83        end
84
85        return true
86    end
87}

因为面板按钮会随着游戏进行而会有变化,所以上述脚本只适用于开局。

来源: https://www.cnblogs.com/Streamlet/p/17061039.html




©2004-2025 溪流网站 保留所有权利