搜尋


返回清單
切換到指定樓層
通知這文章過時或找檔案 發表主題

9/29 AHK 自瞄腳本 分享

[複製連結]
1
dh972513 ( Lv.30 大天使 ) 發表於 2016-9-29 12:29:29 | 只看該作者 回覆獎勵 |升序瀏覽 |閱讀模式

youtube
外連至此YOUTUBE影片連結





程式


所有站內附件皆會附上安全掃描報告
請會員查看純淨度百分比後判斷使用



相關檔案須知:
取得檔案前,請先詳細閱讀文章內容
避免不必要錯誤與誤會發生。
也可多參考文章討論樓層內容
了解附件檔案相關討論資訊。





密碼:
102030405060708090Haha


原始碼
  1. #NoTrayIcon
  2. #SingleInstance, Force
  3. #NoEnv
  4. #Include, gdip.ahk
  5. global layout, tooltipArray, pToken, Scan0, Stride, ts
  6. SetBatchLines,-1
  7. SetMouseDelay,-1
  8. coordmode,mouse,screen
  9. coordmode,tooltip,screen
  10. LoadLayout()
  11. Tooltip()
  12. ts := new TempSettings()
  13. ts.Refresh()
  14. altMouse := 1
  15. return

  16. ~F12::
  17. ~home::
  18. ~delete::
  19. Tooltip()
  20. return
  21. ~up::Tooltip(,-1)
  22. ~down::Tooltip(,1)
  23. ~right::Tooltip(1)
  24. ~left::Tooltip(-1)

  25. aim:
  26. if (!active) {
  27.         active := true
  28.         while (GetKeyState(strreplace(a_thishotkey,"~"),"P")) {
  29.                 match := false
  30.                 QPX(True)
  31.                
  32.                 movepoint := new point(0,0)
  33.                 movepoint2 := new point(0,-1)
  34.                
  35.                 if (ts.alternative == 1) {
  36.                         pbmp := Gdip_BitmapFromScreen(ts.search_offset.x "|" ts.search_offset.y "|" ts.dimensions.x "|" ts.dimensions.y)
  37.                         E1 := Gdip_LockBits(pbmp, 0, 0, ts.dimensions.x, ts.dimensions.y, Stride, Scan0, BitmapData,1)
  38.                 }
  39.                 else if (ts.alternative == 2) {
  40.                        
  41.                 }
  42.                 else {
  43.                         pbmp := BitmapFromScreen2(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y,ts.dc)
  44.                         E1 := Gdip_LockBits(pbmp, 0, 0, ts.dimensions.x, ts.dimensions.y, Stride, Scan0, BitmapData,1,0x21808)
  45.                 }
  46.                 loop % (ts.dimensions.max()/ts.spread)**2 {
  47.                         if ((-ts.dimensions.x/2 < movepoint.x) <= ts.dimensions.x/2) && ((-ts.dimensions.y/2 < movepoint.y) <= ts.dimensions.y/2) {
  48.                                 search_point := new point((movepoint.x*ts.spread) + (ts.dimensions.x/2), (movepoint.y*ts.spread) + (ts.dimensions.y/2))
  49.                                 if (search_point.x >= 0 && search_point.x < ts.dimensions.x) && (search_point.y >= 0 && search_point.y < ts.dimensions.y) {
  50.                                        
  51.                                         ;~ GetRGB(search_point,"dwm|" handle,r,g,b)
  52.                                         GetRGB(search_point,"",r,g,b)
  53.                                        
  54.                                         if (r > 240 && g < 20 && b < 20) && (b > 0) && (g == 0) {
  55.                                                
  56.                                                 match := true
  57.                                                
  58.                                                 found_point := new point(search_point.x-3,search_point.y)
  59.                                                 FindLeftEdge(found_point)
  60.                                                
  61.                                                 mouse_point := new point((ts.search_offset.x+found_point.x)-ts.window_center.x, (ts.search_offset.y+found_point.y-ts.offset_y)-ts.window_center.y)
  62.                                                
  63.                                                 DllCall("mouse_event", "UInt", 0x01, "UInt", (mouse_point.x+ts.mouse_offset.x)/ts.ingame_sens, "UInt", (mouse_point.y+ts.mouse_offset.y)/(ts.ingame_sens*2.41))
  64.                                                
  65.                                                 ;~ if (!altMouse)
  66.                                                         ;~ match_search_offset := new point(ts.window_center.x+(mouse_point.x*0.5)-ts.match_dimensions.x/1.5 , ts.window_center.y+(mouse_point.y*0.5)-ts.match_dimensions.y/2+ts.offset_y)
  67.                                                 ;~ else
  68.                                                 match_search_offset := new point(ts.window_center.x+(mouse_point.x)-ts.match_dimensions.x+ts.mouse_offset.x, ts.window_center.y+(mouse_point.y)-ts.match_dimensions.y+ts.mouse_offset.y+ts.offset_y)
  69.                                         }
  70.                                 }
  71.                         }
  72.                         if (!match) {
  73.                                 if (movepoint.x == movepoint.y || (movepoint.x < 0 && movepoint.x == -movepoint.y) || (movepoint.x > 0 && movepoint.x == 1-movepoint.y)) {
  74.                                         movepoint2.swap()
  75.                                 }
  76.                                 movepoint.add(movepoint2.x,movepoint2.y)
  77.                         }
  78.                 } until (match)
  79.                
  80.                
  81.                 if (match) {
  82.                         ts.dimensions := new point(ts.match_dimensions.x,ts.match_dimensions.y)
  83.                         ts.search_offset := match_search_offset
  84.                         if (ts.overlayShow)
  85.                                 overlay(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y,,1)
  86.                         dur := QPX(false)
  87.                         if (dur < 0.008) {
  88.                                 delay(0.008-dur)
  89.                         }
  90.                 }
  91.                 else {
  92.                         if (ts.dimensions.max() < ts.start_dimensions.min()) {
  93.                                 ts.dimensions.x += 200
  94.                                 ts.dimensions.y += 100
  95.                                 ts.search_offset.sub(100,50)
  96.                                 if (ts.overlayShow)
  97.                                         overlay(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y,,1)
  98.                         }
  99.                         else {
  100.                                 ts.dimensions := ts.start_dimensions
  101.                                 ts.search_offset := ts.start_search_offset
  102.                                 if (ts.overlayShow)
  103.                                         overlay(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y)
  104.                         }
  105.                         dur := QPX(false)
  106.                         if (dur < 0.008) {
  107.                                 delay(0.008-dur)
  108.                         }
  109.                        
  110.                 }
  111.                
  112.                 Gdip_UnlockBits(pbmp, BitmapData)
  113.                 Gdip_DisposeImage(pbmp)
  114.                
  115.         }
  116.         active := false
  117. }
  118. ts.dimensions := ts.start_dimensions
  119. ts.search_offset := ts.start_search_offset
  120. overlay(ts.search_offset.x, ts.search_offset.y, ts.dimensions.x, ts.dimensions.y)
  121. return

  122. FindHPBar() {
  123.        
  124. }

  125. GetRGB(point,mode,byref r, byref g, byref b) {
  126.         mode := strsplit(mode,"|")
  127.         if (mode[1] == "dwm") {
  128.                 Gdip_FromRGB(DllCall("gdi32.dll\GetPixel", "UInt", ts.dc, "Int", point.x, "Int", point.y, "UInt"),b,g,r)
  129.                
  130.         }
  131.         else
  132.                 Gdip_FromRGB(NumGet(Scan0+0, (point.x*3)+(point.y*Stride)),r,g,b)
  133. }

  134. FindLeftEdge(byref found_point) {
  135.         mismatch := 0
  136.         loop 100{
  137.                 if (found_point.x < 0 || found_point.x > dimensions.x)
  138.                         mismatch := 9
  139.                 GetRGB(search_point,"",r,g,b)
  140.                 if !((r > 200 && g < 100 && b < 100))
  141.                         mismatch++
  142.                 else
  143.                         mismatch := 0
  144.                 found_point.x-=2
  145.         } until % mismatch > 8
  146. }

  147. BitmapFromScreen2(s_x,s_y,s_w,s_h,dc) {
  148.     chdc := CreateCompatibleDC(dc), hbm := CreateDIBSection(s_w, s_h, chdc), obm := SelectObject(chdc, hbm)
  149.         BitBlt(chdc, 0, 0, s_w, s_h, dc, s_x, s_y)
  150.    
  151.         pbmp := Gdip_CreateBitmapFromHBITMAP(hbm)
  152.         SelectObject(chdc, obm), DeleteObject(hbm), DeleteDC(chdc)
  153.     return pbmp
  154. }

  155. Gdip_FromRGB(RGB, ByRef R, ByRef G, ByRef B)
  156. {
  157.         R := (0x00ff0000 & RGB) >> 16
  158.         G := (0x0000ff00 & RGB) >> 8
  159.         B := 0x000000ff & RGB
  160. }

  161. Delay( D=0.001 ) {
  162.     Static F
  163.     Critical
  164.     F ? F : DllCall( "QueryPerformanceFrequency", Int64P,F )
  165.     DllCall( "QueryPerformanceCounter", Int64P,pTick ), cTick := pTick
  166.     While( ( (Tick:=(pTick-cTick)/F)) <D ) {
  167.         DllCall( "QueryPerformanceCounter", Int64P,pTick )
  168.         Sleep -1
  169.     }
  170.     Return Round( Tick,3 )
  171. }

  172. QPX( N=0 ) {
  173.         Static F,A,Q,P,X
  174.         If        ( N && !P )
  175.                 Return        DllCall("QueryPerformanceFrequency",Int64P,F) + (X:=A:=0) + DllCall("QueryPerformanceCounter",Int64P,P)
  176.         DllCall("QueryPerformanceCounter",Int64P,Q), A:=A+Q-P, P:=Q, X:=X+1
  177.         Return        ( N && X=N ) ? (X:=X-1)<<64 : ( N=0 && (R:=A/X/F) ) ? ( R + (A:=P:=X:=0) ) : 1
  178. }

  179. overlay(x ,y ,w ,h, create=0,c=0) {
  180.         static overlay_ID
  181.         if (!overlay_ID) {
  182.                 Gui, 2: +E0x20 -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +OwnDialogs
  183.                 Gui, 2: Show,,Window
  184.                 overlay_ID := WinExist()
  185.         }
  186.         overlay_dib := CreateDIBSection(w, h)
  187.         overlay_dc := CreateCompatibleDC()
  188.         overlay_obm := SelectObject(overlay_dc, overlay_dib)
  189.         G := Gdip_GraphicsFromHDC(overlay_dc)
  190.         if (!c)
  191.                 overlay_pen := Gdip_CreatePen(Gdip_ToARGB(255,255,0,0), 2)
  192.         else
  193.                 overlay_pen := Gdip_CreatePen(Gdip_ToARGB(255,0,255,0), 2)
  194.         Gdip_DrawRectangle(G, overlay_pen, 0, 0, w, h)
  195.         Gdip_DeletePen(overlay_pen)
  196.         UpdateLayeredWindow(overlay_ID, overlay_dc, x, y, w, h)
  197.         SelectObject(overlay_dc, overlay_obm)
  198.         DeleteObject(overlay_dib)
  199.         DeleteDC(overlay_dc)
  200.         Gdip_DeleteGraphics(G)
  201. }

  202. class point {
  203.         __new(x,y) {
  204.                 this.x := x
  205.                 this.y := y
  206.         }
  207.         swap() {
  208.                 ty := -this.y
  209.                 this.y := this.x
  210.                 this.x := ty
  211.         }
  212.         max() {
  213.                 if (this.x > this.y)
  214.                         return  % this.x
  215.                 else
  216.                         return % this.y
  217.         }
  218.         min() {
  219.                 if (this.x < this.y)
  220.                         return  % this.x
  221.                 else
  222.                         return % this.y
  223.         }
  224.         add(x,y) {
  225.                 this.x += x
  226.                 this.y += y
  227.         }
  228.         sub(x,y) {
  229.                 this.x -= x
  230.                 this.y -= y
  231.         }
  232. }

  233. pickItem(subs,val=0) {
  234.         temp := strsplit(layout[subs],"|")
  235.         if (instr(temp[1],"num")) {
  236.                 temp2 := strsplit(temp[1],":")
  237.                 newVal := temp[2]+(temp2[2]*val)
  238.                 if (newVal >= 0) {
  239.                         if (temp2[2] < 1)
  240.                                 temp[2] := round(newVal,2)
  241.                         else
  242.                                 temp[2] := round(newVal,0)               
  243.                 }
  244.                 layout[subs] := temp[1] "|" temp[2]
  245.                 return % temp[2]
  246.         }
  247.         else if (instr(temp[1],"bool")) {
  248.                 temp2 := strsplit(temp[1],":")
  249.                 temp[1] := temp2[1] ":" !temp2[2]
  250.                 temp[2] := (temp2[2]) ? "Enabled" : "Disabled"
  251.                 layout[subs] := temp[1] "|" temp[2]
  252.                 return % temp[2]
  253.         }
  254.         ;~ else if (instr(temp[1],"btn")) {
  255.                 ;~ if (val)
  256.                 ;~ MsgBox sup
  257.         ;~ }
  258.         else {
  259.                 temp[1] += val
  260.                 retStr := strsplit(temp[2],";")[temp[1]]
  261.                 if (!retStr)
  262.                         temp[1] -= val
  263.                 else if (subs == "1a. Mode" && val) {
  264.                         LoadLayout(temp[1],temp[1]-val)
  265.                 }
  266.                 layout[subs] := temp[1] "|" temp[2]
  267.                 return % strsplit(temp[2],";")[temp[1]]
  268.         }
  269. }

  270. Tooltip(newTab=0,newItem=0) {
  271.         static activeTab, activeItem, toggle, x, y
  272.         if (toggle == "")
  273.                 toggle := 1
  274.        
  275.         if (!newTab && !newItem) {
  276.                 toggle := ! toggle
  277.                 mousegetpos,x,y
  278.         }
  279.        
  280.        

  281.         if (toggle) {
  282.                 activeItem := (!newItem && !activeItem) ? 1 : activeItem+newItem ;() ? activeItem+newItem : activeItem
  283.                 if (activeItem == 1)
  284.                         activeTab := (!newTab && !activeTab) ? 1 : (activeTab+newTab > 0 && activeTab+newTab <= tooltipArray["tabCount"]) ? activeTab+newTab : activeTab
  285.                 else
  286.                         addItem := newTab
  287.                 for tabName in tooltipArray {
  288.                         if (a_index == activeTab) {
  289.                                
  290.                                 for t in tooltipArray[tabName]
  291.                                         itemCount := a_index
  292.                                 if (activeItem < 1 || activeItem > itemCount+1)
  293.                                                 activeItem := activeItem-newItem
  294.                                                
  295.                                 if (activeItem == 1)
  296.                                         nText .= "|[" strsplit(tabName,".")[2] "]|`n"
  297.                                 else
  298.                                         nText .= strsplit(tabName,".")[2] "`n"
  299.                                
  300.                                 for subs in tooltipArray[tabName] {
  301.                                        
  302.                                         if (a_index+1 == activeItem) {
  303.                                                 if (addItem) {
  304.                                                         tooltipArray[tabName,subs] := pickItem(subs,addItem)
  305.                                                 }
  306.                                                 if (!tooltipArray[tabName,subs])
  307.                                                         nText .= "|[" strsplit(subs,".")[2] "]|"
  308.                                                 else
  309.                                                         nText .= strsplit(subs,".")[2] ": " "|[" tooltipArray[tabName,subs] "]|`n"
  310.                                         }
  311.                                         else {
  312.                                                 if (!tooltipArray[tabName,subs])
  313.                                                         nText .= strsplit(subs,".")[2]
  314.                                                 else
  315.                                                         nText .= strsplit(subs,".")[2] ": " tooltipArray[tabName,subs] "`n"
  316.                                                
  317.                                         }
  318.                                 }
  319.                         }
  320.                 }
  321.                 tooltip, % rTrim(nText,"`n"), % x, % y
  322.         }
  323.         else
  324.                 tooltip,
  325.        
  326.         if (ts.overwatch) {
  327.                 ts.Refresh()
  328.         }
  329. }

  330. LoadLayout(num=1,pnum=0) {
  331.         if (pnum) {
  332.                 SaveLayout(pnum)
  333.         }
  334.         layout := array(), tooltipArray := array()
  335.        
  336.         if (!fileexist("layout.dat")) {
  337.                 loop 23 {
  338.                         fileappend, % a_index ";1;15.00;70;30;8;400;300;200;100;1;0`r`n",layout.dat
  339.                 }
  340.         }
  341.         fileread,strIn,layout.dat
  342.         loop,parse,strIn,`r`n
  343.         {
  344.                 if (a_loopfield) {
  345.                         temp := strsplit(a_loopfield,";")
  346.                         if (temp[1] == num) {
  347.                                 layout["1a. Mode"] := num "|Default;Ana;Bastion;D.V.A;Genji;Hanzo;Junkrat;Lúcio;McCree;Mei;Mercy;Pharah;Reaper;Reinhardt;Roadhog;Soldier: 76;Symmetra;Tracer;Torbjörn;Widowmaker;Winston;Zarya;Zenyatta"
  348.                                 layout["1b. Hotkeys"] := temp[2] "|LButton;RButton;LAlt;LButton, RButton;LButton, RButton, LAlt"
  349.                                 layout["2a. Ingame sensitivity"] := "num:0.05|" temp[3]
  350.                                 layout["2b. Mouse offset X"] := "num:1|" temp[4]
  351.                                 layout["2c. Mouse offset Y"] := "num:1|" temp[5]
  352.                                 layout["3a. Search spread"] := "num:1|" temp[6]
  353.                                 layout["3b. Start width"] := "num:20|" temp[7]
  354.                                 layout["3c. Start height"] := "num:20|" temp[8]
  355.                                 layout["3d. Match width"] := "num:20|" temp[9]
  356.                                 layout["3f. Match height"] := "num:20|" temp[10]
  357.                                 layout["4a. Display overlay"] := "bool:" temp[11] "|Disabled"
  358.                                 layout["4b. Alternative search"] := "bool:" temp[12] "|Disabled"
  359.                                
  360.                         }
  361.                 }
  362.         }
  363.         menuLayout := "1.Profile|1a. Mode,1b. Hotkeys;"
  364.                         . "2.Mouse Settings|2a. Ingame sensitivity,2b. Mouse offset X,2c. Mouse offset Y;"
  365.                         . "3.Search Settings|3a. Search spread,3b. Start width,3c. Start height,3d. Match width,3f. Match height;"
  366.                         . "4.General Settings|4a. Display overlay,4b. Alternative search"
  367.                        
  368.         loop,parse,menuLayout,`;
  369.         {
  370.                 tabName := strsplit(a_loopfield,"|")
  371.                 subs := strsplit(tabName[2],",")
  372.                 loop % subs.length(){
  373.                         tooltipArray[tabName[1],subs[a_index]] := pickItem(subs[a_index])
  374.                 }
  375.                 len := a_index
  376.         }
  377.         tooltipArray["tabCount"] := len
  378. }

  379. class TempSettings {
  380.         Refresh() {
  381.                 static hotkeys
  382.                
  383.                 if (winexist("ahk_class TankWindowClass") && !ts.overwatch) {
  384.                         this.overwatch := true
  385.                         ;~ goto runr
  386.                 }
  387.                 else {
  388.                         while !(winexist("ahk_class TankWindowClass")) {
  389.                                 tooltip, Run overwatch
  390.                                 sleep, 50
  391.                         }
  392.                        
  393.                 }
  394.                 if (!ptoken)
  395.                         pToken := Gdip_Startup()
  396.                 ;~ winactivate, % "ahk_id " this.handle
  397.                 this.handle := winexist("ahk_class TankWindowClass")
  398.                 this.dc := GetDC(this.handle)
  399.                 pbmp := Gdip_BitmapFromHWND(this.handle) ;
  400.                 Gdip_GetDimensions(pbmp, w, h) ;
  401.                 Gdip_DisposeImage(pbmp) ;
  402.                 ts.window_center := new point(w/2,h/2)
  403.                 this.active := strsplit(layout["1a. Mode"],"|")[1]
  404.                 ingame_sens := strsplit(layout["2a. Ingame sensitivity"],"|")[2]
  405.                 this.mouse_offset := new point(strsplit(layout["2b. Mouse offset X"],"|")[2], strsplit(layout["2c. Mouse offset Y"],"|")[2])
  406.                 this.spread := strsplit(layout["3a. Search spread"],"|")[2]
  407.                 this.start_dimensions := new point(strsplit(layout["3b. Start width"],"|")[2], strsplit(layout["3c. Start height"],"|")[2])
  408.                 this.dimensions := this.start_dimensions
  409.                 this.match_dimensions := new point(strsplit(layout["3d. Match width"],"|")[2], strsplit(layout["3f. Match height"],"|")[2])
  410.                 this.overlayShow := !(strsplit(strsplit(layout["4a. Display overlay"],":")[2],"|")[1])
  411.                 this.alternative := !(strsplit(strsplit(layout["4b. Alternative search"],":")[2],"|")[1])
  412.                 this.offset_y := -this.dimensions.max()*0.125
  413.                 this.start_search_offset := new point(this.window_center.x-(this.dimensions.x/2),(this.window_center.y-(this.dimensions.y/2))+this.offset_y)
  414.                 this.search_offset := this.start_search_offset
  415.                 cappedFPS := 5
  416.                 this.ingame_sens := 0.116*(ingame_sens*(16/cappedFPS))
  417.                
  418.                 if (hotkeys)
  419.                         loop,parse,hotkeys,`,
  420.                                 hotkey, % strreplace("~" a_loopfield,a_space,""), aim, off
  421.                
  422.                 temp := strsplit(layout["1b. Hotkeys"],"|")
  423.                 hotkeys := strsplit(temp[2],";")[temp[1]]
  424.                
  425.                 loop,parse,hotkeys,`,
  426.                         hotkey, % strreplace("~" a_loopfield,a_space,""), aim, on
  427.                
  428.                 if (this.overlayShow)
  429.                         overlay(this.search_offset.x, this.search_offset.y, this.start_dimensions.x, this.start_dimensions.y,1)
  430.                
  431.         }
  432. }

  433. SaveLayout(num) {
  434.         for k, v in layout {
  435.                 if (a_index <= 2)
  436.                         out .= strsplit(v,"|")[1] ";"
  437.                 else if (a_index <= 10)
  438.                         out .= strsplit(v,"|")[2] ";"
  439.                 else
  440.                         out .= !strsplit(strsplit(v,":")[2],"|")[1] ";"
  441.         }
  442.         out := rTrim(out,";")
  443.         fileread,strIn,layout.dat
  444.         filedelete,layout.dat
  445.         loop, parse, strIn, `r`n
  446.         {
  447.                 if (a_loopfield) {
  448.                         temp := strsplit(a_loopfield,";")
  449.                         if (temp[1] == num)
  450.                                 strOut .= out "`r`n"
  451.                         else
  452.                                 strOut .= a_loopfield "`r`n"
  453.                 }
  454.         }
  455.         fileappend, % strOut, layout.dat
  456. }

  457. rshift::
  458. GuiClose:
  459. SaveLayout(ts.active)
  460. Gdip_DisposeImage(pbmp)
  461. Gdip_Shutdown(pToken)
  462. ExitApp
複製代碼






大家正在看啥


收藏收藏 分享文章到FB上分享
回覆 使用道具 檢舉
複製專屬你的推廣連結:發至FB與各論壇宣傳:累積點數換GP商品 & 藍鑽
每五點閱率就可以兌換藍鑽積分或遊戲點卡 夢遊推廣文章換GP商品

你需要登入後才可以回覆 登入 | 加入會員

本版積分規則

Copyright (C) 2010-2020 夢遊電玩論壇

廣告合作:請直接聯繫我們,並附上您預刊登位置的預算。  

快速回覆 返回頂端 返回清單