石质碎片吧 关注:2,951贴子:14,567
  • 6回复贴,共1

辅助工具AutoAHK和我的代码

只看楼主收藏回复

大部分玩家都知道,这个游戏以硬核著称。另外,由于目前是beta版,游戏的很多功能并不完善。比如说,地图以前是要放在背包里面使用的;某版本以前的地图甚至以“硬核”之名(实际上是毛子的懒惰和对玩家的轻视),不显示玩家的位置。在大量玩家的强烈建议之后,后面总算开始显示玩家的位置了。到目前为止,还是有很多不便之处。为了更好的游戏体验,我开始自力更生,探索一些方便的游戏工具。下面给大家介绍我最近的成果之一:屏幕平移。
我最开始走路喜欢沿道路走,这样更有方向感和代入感。现在为了省事,都是贴着地图边缘走。就算贴边走,以前每1小格地图也要小心翼翼,花好几分钟才能走完。最近才发现,可以按住鼠标中键,拖到黑洞洞的小格地图的边缘,然后让游戏人物一次走到边缘。但是人工按住鼠标中键,拖来拖去操作起来比较繁琐。最后我不胜其烦,终于开始使用自动按键工具AutoAHK。用了之后感觉非常好,特此向大家安利一下。AutoAHK是一个非常好用的工具,感兴趣的玩家请自行搜索,下载,安装。我在下面分享我的代码,用上下左右四个箭头按键,分别实现按住鼠标中键,一次向上/下/左/右拖动半个小格地图。一个小格地图是88*88小块。我自己的屏幕分辨率是1366*768,大家可以自己调整代码里面鼠标的位置。在安装AutoAHK之后,把下面的代码拷贝到文件 "屏幕平移.ahk" 里面去,双击这个文件就可以使用了。
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
; SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#IfWinActive Stoneshard
Right::
{
loop 3
{
SendEvent {Click 881 365 Middle Down}
Sleep 1
SendEvent {Click 2 365 Middle Up}
Sleep 1
}
}
return
Left::
{
loop 3
{
SendEvent {Click 481 365 Middle Down}
Sleep 1
SendEvent {Click 1365 365 Middle Up}
Sleep 1
}
}
return
Down::
{
; Click 681, 365, Middle Down
loop 6
{
SendEvent {Click 681 480 Middle Down}
Sleep 1
SendEvent {Click 681 102 Middle Up}
Sleep 1
}
; Click 681, 365, Middle Up
}
return
UP::
{
loop 6
{
SendEvent {Click 681 202 Middle Down}
Sleep 1
SendEvent {Click 681 580 Middle Up}
Sleep 1
}
}
return
#IfWinActive


IP属地:浙江1楼2022-01-11 18:15回复
    0首爹?


    IP属地:广东来自Android客户端2楼2022-01-11 22:23
    回复
      有随地存档的吗


      IP属地:福建3楼2022-01-20 21:16
      收起回复
        1.23号更新存取系统,在文件“石质碎片.AHK”中添加了很多热键,其中占用了系统的“s”键(建议用鼠标点击技能或者修改系统的技能的快捷键). 本楼最后附上源码。下面说明一下新的热键:
        "s": (Save) 在游戏中存盘并把存盘目录拷贝到新的目录下面,同时当前目录+1,并在此基础上继续游戏.
        ”l": (Load) 把最新的目录拷贝到存盘目录下,并在游戏中读取文件。
        ”o": 重新对游戏中的目录个数计数,适用于玩游戏中途对拷贝出来的目录修改后重置。
        "u": (Upload) 把最新的目录拷贝到备用目录“0\”。
        “v”: (View) 显示当前最新的目录。
        "r" : (Read) 把备用目录拷贝到存盘目录下,并在游戏中读取文件。
        “t”: (Temp) 在游戏中存盘并把存盘目录拷贝到新的目录下面,同时当前目录+1,并读取备用目录下的游戏记录。
        “q": (Quit) 在游戏中存盘并把存盘目录拷贝到新的目录下面,同时当前目录+1,并退出游戏。
        “x”: (eXit) 直接退出游戏。
        源码如下:
        cur_char = 4 ; 目前在玩第4个角色存档
        Local = \AppData\Local\StoneShard\characters_v1\character_
        SetWorkingDir, % "C:\Users\" . A_UserName . Local . cur_char
        ; SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
        SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
        #IfWinActive Stoneshard
        title = Stoneshard
        xpos := 650
        ypos := 360
        count := count_files()
        o:: count := count_files()
        return
        s::
        getpos(xpos, ypos)
        save_game(title, count)
        load_game(title, count)
        backpos(xpos, ypos)
        return
        t::
        getpos(xpos, ypos)
        save_game(title, count)
        load_game(title, 0)
        backpos(xpos, ypos)
        return
        r::
        getpos(xpos, ypos)
        load2_game(title, 0)
        backpos(xpos, ypos)
        return
        l::
        getpos(xpos, ypos)
        ;; Msgbox, % "Load save " . count . "."
        load2_game(title, count)
        backpos(xpos, ypos)
        return
        v::
        Msgbox, % "Last save is: " . count . "."
        ; Msgbox, % "最后一个存档目录是: " . count
        return
        u::
        reset0_file(count)
        ; Msgbox, % "Save " . count . " is copied."
        return
        q::
        save_game(title, count)
        WinClose
        return
        x::
        load_file(count)
        WinClose
        return
        UP::
        {
        getpos(xpos, ypos)
        loop 6
        {
        SendEvent {Click 681 202 Middle Down}
        Sleep 1
        SendEvent {Click 681 580 Middle Up}
        Sleep 1
        }
        backpos(xpos, ypos)
        }
        return
        Down::
        {
        getpos(xpos, ypos)
        loop 6
        {
        SendEvent {Click 681 480 Middle Down}
        Sleep 1
        SendEvent {Click 681 102 Middle Up}
        Sleep 1
        }
        backpos(xpos, ypos)
        }
        return
        Left::
        {
        getpos(xpos, ypos)
        loop 3
        {
        SendEvent {Click 481 365 Middle Down}
        Sleep 1
        SendEvent {Click 1365 365 Middle Up}
        Sleep 1
        }
        backpos(xpos, ypos)
        }
        return
        Right::
        {
        getpos(xpos, ypos)
        loop 3
        {
        SendEvent {Click 881 365 Middle Down}
        Sleep 1
        SendEvent {Click 2 365 Middle Up}
        Sleep 1
        }
        backpos(xpos, ypos)
        }
        return
        save_game(title, ByRef count)
        ; save game
        {
        save_exit(%title%)
        save_file(count)
        begin_game(%title%)
        }
        load_game(title, count)
        ; load game from the beginning of game.
        {
        load_file(count)
        my_LeftClick(1100, 510)
        load_exit()
        }
        load2_game(title, count)
        ; direct load game from the middle of game.
        {
        ControlSend, ahk_parent, {ESC}, %title%
        Sleep 200
        load_file(count)
        Sleep 400
        my_LeftClick(680, 460)
        load_exit()
        ; Sleep 4000
        ; load_file(count)
        }
        save_exit(title)
        {
        ; 按"ESC"键,返回到主菜单。
        ControlSend, ahk_parent, {ESC}, %title%
        Sleep 200
        ; 点击”存盘并退出"的坐标。
        my_LeftClick(680, 626)
        my_LeftClick(580, 470)
        Sleep 4000
        my_LeftClick(580, 470)
        Sleep 200
        }
        load_exit()
        {
        ; 点击最新的一个存档的坐标。
        my_LeftClick(960, 200)
        }
        begin_game(title)
        {
        ; 点击按钮 “开始游戏” 的坐标。
        my_LeftClick(1100, 400)
        Sleep 200
        }
        count_files()
        {
        count2 := 2
        Loop, Files, .\*., D
        count2++
        If InStr(FileExist("exitsave_1"), "D")
        count2--
        If InStr(FileExist("0"), "D")
        count2--
        return count2
        }
        save_file(ByRef count)
        {
        count++
        while InStr(FileExist(%count%), "D")
        count++
        FileCreateDir, %count%
        FileCopy, exitsave_1\*, %count%\*
        }
        save0_file()
        {
        FileDelete, 0\*
        FileRemoveDir, 0
        FileCreateDir, 0
        FileCopy, exitsave_1\*, 0\*
        ; FileCopy, exitsave_1\*, 0\*, 1 ; one line should be ok
        }
        load_file(count)
        {
        FileDelete, exitsave_1\*
        FileRemoveDir, exitsave_1
        FileCreateDir, exitsave_1
        ;; Msgbox, % "Load save(2) " . count . "."
        FileCopy, %count%\*, exitsave_1\*
        }
        reset0_file(count)
        {
        load_file(count)
        save0_file()
        }
        getpos(byRef xpos, byRef ypos)
        {
        MouseGetPos, xpos, ypos
        }
        backpos(xpos, ypos)
        {
        MouseMove, xpos, ypos
        }
        my_LeftClick(x, y) ; 组装的左鼠标点击,在游戏里面需要先按下,再点击。
        {
        ; Sleep 100 改成 Sleep 200 后,可以运行了。有时还不稳定。
        ; Click, %x% %y% LEFT Down
        Click, %x% %y% LEFT Down
        Sleep 10
        Click, %x% %y% LEFT Down
        Sleep 10
        Loop 6
        {
        Sleep 100
        Click
        }
        ; Sleep 200
        ; Click
        ; SendInput {Click %x% %y% LEFT} {Click}
        }
        #IfWinActive


        IP属地:浙江4楼2022-01-23 17:44
        回复
          真 硬核大佬


          IP属地:广东来自Android客户端5楼2022-02-08 19:02
          回复
            这么硬核得么,能弄个自动开图么


            IP属地:江苏6楼2022-02-10 19:20
            回复