//没登陆

欢迎您来到凯恩之角,奈非天!

帖子:1192

符文:24

1#
厲害的!

想過這事,但自己水平一直還夠不上這打法,就懶得弄。
发表于 2018-9-29 16:24:17 |显示全部楼层 来自:广东

帖子:1192

符文:24

2#
本帖最后由 iVoxing 于 2018-11-2 11:54 编辑

樓主:
試試看能不能從 d3prefs.txt 裡面獲取屏幕分辨率,這樣不但不再需要用戶輸入,也能兼顧三種屏幕方式。
以下代碼在 IDE 裡面調試可以,但還沒上 LGS 腳本。估計問題不大——


  1. prefs_file = "C:\\Users\\xxx\\Documents\\Diablo III\\D3Prefs.txt" -- 注意修改成正確的路徑
  2. prefs = {}
  3. for line in io.lines(prefs_file) do
  4.   prefs[#prefs +1] = line
  5. end
  6. for k,v in pairs(prefs) do
  7.   -- print('line[' .. k .. ']', v)
  8.   if string.find(v, "DisplayModeWindowMode") then
  9.     WM = string.sub(v, string.find(v, "%d")) -- windowmode, 0 full, 1 windowed, 2 full windowed
  10.   elseif string.find(v,"DisplayModeUIOptWidth") then -- return 1 if found
  11.     UW = tonumber(string.sub(v, string.find(v, "%d+")))
  12.   elseif string.find(v,"DisplayModeUIOptHeight") then
  13.     UH = tonumber(string.sub(v, string.find(v, "%d+")))
  14.   elseif string.find(v,"DisplayModeWidth") then
  15.     WW = tonumber(string.sub(v, string.find(v, "%d+")))
  16.   elseif string.find(v,"DisplayModeHeight") then
  17.     WH = tonumber(string.sub(v, string.find(v, "%d+")))
  18.   end
  19. end
  20. pixels = {["0"]={UW,UH},["1"]={WW,WH},["2"]={UW,UH}}
  21. my_pxl = pixels[WM]
  22. print(my_pxl[1],my_pxl[2])
  23. print(type(my_pxl[1]))
复制代码


发表于 2018-11-2 11:52:35 |显示全部楼层 来自:广东

帖子:1192

符文:24

3#
本帖最后由 iVoxing 于 2018-11-2 16:38 编辑
絕對水餃 发表于 2018-11-2 16:12
string是可以的,实际上主要是获取屏幕比例,同比按键位置相同

比例問題,請參考下面的代碼:

  1. my_ratio = 10/16
  2. -- my_ratio 可以计算得到
  3. ratio_tbl = {3/4,10/16,9/16} -- 比小数直观一点
  4. ratio_txt = {[3/4]="4:3",[10/16]="16:10",[9/16]="16:9"}
  5. y_pc_tbl = {rst=43690,pwr=36512,spd=31519,vit=26526,int=21533,acp=48059}
  6. x_px1050 = {rst=0,pwr=275,spd=275,vit=275,int=275,acp=-115}
  7. -- 这是距离中点的 x 像素坐标
  8. -- x 百分比坐标 = X to center inpercent on H * raido + 0.5
  9. x_pc_tbl = {}
  10. for k,v in pairs(ratio_tbl) do
  11.   --print("------------",k,v)
  12.   x_pc_tbl[v]={}
  13.   for k1,v1 in pairs(x_px1050) do
  14.     x_pc_tbl[v][k1] = math.ceil(((v1/1050)*(v)+0.5)*65535); -- v 纵横比,v1 1050时的中距
  15.     --print(k1,x_pc_tbl[k][k1])
  16.   end
  17. end

  18. my_x_tbl = x_pc_tbl[my_ratio]
  19. --[[for k,v in pairs(my_x_tbl) do
  20.   print(k,v)
  21. end]]
  22. my_pwr_x = my_x_tbl.pwr
  23. my_pwr_y = y_pc_tbl.pwr
  24. print("pwr in ",ratio_txt[my_ratio],":",my_pwr_x,my_pwr_y)
复制代码


現在的顯示比例已經多樣化了,不過按這個方式添加起來也不是很麻煩。

這裡還沒有考慮「黑邊」,我還不確定黑邊對坐標的影響方式。
发表于 2018-11-2 16:35:17 |显示全部楼层 来自:广东

帖子:1192

符文:24

4#
很遺憾,LGS 不支持 io 操作,不能直接讀取 d3prefs.txt

但在 Windows 裡面,可以用 Powershell 讀取,并生成一個 LGS 可以加載的 .lua;
而在 MacOS 裡面,則可以用 shell,或者 AppleScript。
甚至可以添加文件夾監控,隨著 d3prefs.txt 更新,自動更新這個 .lua。

但這樣除了對使用窗口的玩家有用之外,對於全屏和窗口全屏的情況,意義則不大。
簡單化,還是直接由用戶在腳本裡面輸入分辨率得了。
這樣考慮的話,構建一個 ratio_tbl 也就沒有必要了。

總之:
涉及到屏幕坐標的腳本,用戶可以只輸入一個參數(窗口尺寸),甚至不用輸入,是可行的。
所有按鈕位置,都可以計算得到,不需要用戶逐個輸入。

发表于 2018-11-3 12:51:14 |显示全部楼层 来自:广东
您需要登录后才可以回帖 登录 | 注册网易通行证