RSS

Hướng dẫn viết auto PTV bằng autohotkey

14 Th11
Lời tác giả: Đoạn mã này là kỷ niệm một thời tham gia PTV game online của tôi. Nó được xây dựng trong một thời gian rất dài. Phát triển từ các loại auto bằng phần cứng chuột, phím … Bằng tất cả sự đam mê của nhóm bạn bè trong clan Commandos. Chúng tôi là những kỹ sư cơ khí ô tô đi code phần mềm. Giai đoạn đầu bỡ ngỡ, vạn sự khởi đầu nan. Nhưng dù sao nó vẫn có giá trị kỷ niệm rất lớn trong lòng mọi người!!!

Đây là bài đầu tiên trong loạt bài về phổ biến kinh nghiệm, mã nguồn các chương trình auto tôi đã từng viết cho game PTV. Bản đầu tiên này được viết băng Autohotkey các bạn có thể tìm thấy nó ở đây http://www.autohotkey.com/download/

Giới thiệu: AutoHotkey là một tiện ích miễn phí, mã nguồn mở cho Windows

AutoHotkey cung cấp toàn bộ khả năng cho bàn phím, joystick và chuột. Chẳng hạn, cùng với các phím modifier đặc trưng như Control, Alt, và Shift, bạn có thể sử dụng phím Windows và Capslock như các phím modifiers. Trên thực tế, bạn có thể gán cho bất kỳ một phím (hay mouse button) trở thành một phím modifier.Với nó, bạn có thể:
– Tự động hóa gần như mọi thứ bằng cách gởi thao tác phím và click chuột. Bạn có thể viết một macro mouse hay bàn phím bằng tay hay sử dụng macro recorder.
– Tạo phím nóng cho bàn phím, joystick, và chuột. Hầu như mọi phím, nút hay sự kết hợp đều có thể trở thành 1 phím nóng.
– Tự động hiện đầy đủ chữ viết tắt khi bạn gõ. Chẳng hạn, gõ “btw” sẽ tự động chuyển thành “by the way”.
– Tạo các form nhập dữ liệu, giao diện người dùng và thanh menu.
– Gán lại phím và nút trên bàn phím, joystick và chuột.
– Nhận tín hiệu từ những điều khiển từ xa cầm tay qua WinLIRC client script.
– Thực thi các đoạn mã sẵn có AutoIt v2 và cải tiến chúng với những khả năng mới.
– Chuyển đổi mọi script sang file exe, có thể thực thi trên máy tính không được cài đặt AutoHotkey.

Ở đây tôi không viết hướgn dẫn để bạn sử dụng autohotkey cái này bạn tự search google và đọc Help kèm theo để biết. Tôi chỉ cung cấp cho bạn mã nguồn của bộ auto tôi đã code để bạn tham khảo cách tôi viết chương trình và sửa lại để ứng dụng cho các game khác.

Chương trình này được code theo kiểu include các file text nhằm tách các hàm chức năng riêng các file cho dễ truy xuất và xử lý. Bạn có thể download toàn bộ mã nguồn auto và các file cần thiết để biên dịch của autohotkey tại đây: http://www.box.net/s/b9h2100jnuc9xaij4r24

Bạn sửa chữa bằng notepad rồi chạy file CompileAutoPTV.bat để biên dich thành file thực thi *.exe

Hoặc copy các nội dung sau đây rồi lưu thành file tương ứng nếu không down được theo link trên:

File: AutoHP.ahk
;MsgBox, Auto Bom mau va STM. `nTac gia: TomS - MIDRRANDA. `n(Nhan F10 ==> Start; Ctrl+Alt+H ==> Pause; Ctrl+Alt+S==> Tiep tuc; Ctrl+F12 - Exit . `nThan tang nhung nguoi ban ma toi yeu quy!

;Menu, Tray, Icon, Shell32.dll, 44,1

#Include %A_ScriptDir%\HpStmMana.txt
#Include %A_ScriptDir%\ID.txt

; MAIN PROGRAM
; ------------------------------------------------------------------------------------------------------------------------------------

SetKeyDelay, 50, 50, Play
SetMouseDelay,50, Play
sendmode play
pause

^F10::reload

^F12:: Exitapp

F10::
	{
	pause off
	sleep 50
	if (GetACC()=0)   ; thoat neu ACC khong hop le
	{
	MsgBox, Xin loi ACC PTV ban dang su dung khong co quyen su dung phan mem nay. `n Lien he voi tac gia de duoc cap phep.
	Exitapp
	}

	IniRead, HP, %A_WinDir%\AutoPTV.ini, HPStmMana, HP
	IniRead, STM, %A_WinDir%\AutoPTV.ini, HPStmMana, STM
	IniRead, MANA, %A_WinDir%\AutoPTV.ini, HPStmMana, MANA

	Loop 	; Vong lap chinh
		{
			CheckHeath(HP)
			Sleep, 80
		}

	}

; ----------------------------------------------------------------------------------------------------------------------

;File: Play.ahk  Đây là file thực thi chính của chương trình

Menu, Tray, Icon, Shell32.dll, 44,1
#SingleInstance, FORCE
#Include %A_ScriptDir%\NapMauVaVeLang.txt
#Include %A_ScriptDir%\Click.txt
#Include %A_ScriptDir%\HpStmMana.txt
#Include %A_ScriptDir%\ID.txt
#Include %A_ScriptDir%\DangNhapPTV.txt

;BAT DAU CHUONG TRINH CHINH ----------------------------------------------------------------------------------------

SetKeyDelay, 50, 50, Play
SetMouseDelay, 50, Play
BlockInput, MouseMoveOff
sendmode play
pause

$^F11::
{
	DungCamera()
	WinSet, AlwaysOnTop, off, Priston	;Tat cua so Game ontop
	WinSetTitle, Priston, , Priston Tale
	Sleep, 50
	Process, Exist, Active.exe
	PID := errorLevel
	Sleep, 30
	Process, Close, %PID%
	IniRead, ProgramFoder, %A_WinDir%\AutoPTV.ini, Path, ProgramFoder
	Run, %ProgramFoder%AutoPTV50.exe
	Exitapp
Return
}

$^F9::
{
	DungCamera()
	WinSet, AlwaysOnTop, off, Priston	;Tat cua so Game ontop
	WinSetTitle, Priston, , Priston Tale
	Sleep, 50
	Process, Exist, Active.exe
	PID := errorLevel
	Sleep, 30
	Process, Close, %PID%
	Reload
}

$^F12::
{
	DungCamera()
	WinSet, AlwaysOnTop, off, Priston	;Tat cua so Game ontop
	WinSetTitle, Priston, , Priston Tale
	Sleep, 50
	Process, Exist, Active.exe
	PID := errorLevel
	Sleep, 30
	Process, Close, %PID%
	Exitapp
	Return
}

$F9::
{
	pause off
	BlockInput, MouseMove
	sendmode play
	sendplay {Click 165, 602}	; Chuyen che do chat clan
	; Check cac thong so va Load Ini File
	;-------------------------------------------------

	;if (GetACC()=0)   ; thoat neu ACC khong hop le
	;{
	;MsgBox, Xin loi ACC PTV ban dang su dung khong co quyen su dung phan mem nay. `n Lien he voi tac gia de duoc cap phep.
	;Exitapp
	;}
	;MouseGetPos, Mouse_x, Mouse_y	; Lay toa do chuot hien tai
	IniRead, KieuTanCong, %A_WinDir%\AutoPTV.ini, Mouse, KieuTanCong
	IniRead, Mouse_x, %A_WinDir%\AutoPTV.ini, Mouse, Mouse_x
	IniRead, Mouse_y, %A_WinDir%\AutoPTV.ini, Mouse, Mouse_y
	IniRead, MouseDelay, %A_WinDir%\AutoPTV.ini, Mouse, MouseDelay
	IniRead, Mouse_x_CastSkill, %A_WinDir%\AutoPTV.ini, Mouse, Mouse_x_CastSkill
	IniRead, Mouse_y_CastSkill, %A_WinDir%\AutoPTV.ini, Mouse, Mouse_y_CastSkill
	IniRead, TimeDelayChangeSkill, %A_WinDir%\AutoPTV.ini, Mouse,TimeDelayChangeSkill
	IniRead, TimeReloadPoision, %A_WinDir%\AutoPTV.ini, Mouse, TimeReloadPoision
	TimeReloadPoision*=60000

	IniRead, F2, %A_WinDir%\AutoPTV.ini, Skill, F2
	IniRead, F3, %A_WinDir%\AutoPTV.ini, Skill, F3
	IniRead, F4, %A_WinDir%\AutoPTV.ini, Skill, F4
	IniRead, F5, %A_WinDir%\AutoPTV.ini, Skill, F5
	IniRead, F6, %A_WinDir%\AutoPTV.ini, Skill, F6
	IniRead, F7, %A_WinDir%\AutoPTV.ini, Skill, F7
	IniRead, F8, %A_WinDir%\AutoPTV.ini, Skill, F8
	IniRead, OutParty, %A_WinDir%\AutoPTV.ini, Option, OutParty
	IniRead, OutGameKhiVeLang, %A_WinDir%\AutoPTV.ini, Option, OutGameKhiVeLang
	IniRead, TatMayKhiVeLang, %A_WinDir%\AutoPTV.ini, Option, TatMayKhiVeLang
	IniRead, GoiSoi, %A_WinDir%\AutoPTV.ini, Option, GoiSoi
	IniRead, AutoLogin, %A_WinDir%\AutoPTV.ini, Option, AutoLogin
	IniRead, HP, %A_WinDir%\AutoPTV.ini, HPStmMana, HP
	IniRead, STM, %A_WinDir%\AutoPTV.ini, HPStmMana, STM
	IniRead, MANA, %A_WinDir%\AutoPTV.ini, HPStmMana, MANA
	;-------------------------------------------------

	WinSet, AlwaysOnTop, on, Priston	;Dat cua so Game ontop
	WinMaximize, Priston		; Dat cua so game maximize
	Run, active.exe
	; -------------------------------------------------	

	WinSetTitle, Priston Tale, , Priston Tale - Auto PTV 5.0 for VIP only - Create by: Do Van Kha - Press [Ctrl+F9] to Pause
	; -------------------------------------------------

	SendKeyTomS(0x11)	; Gui phim Ctrl
	Delay(200)
	SendKeyTomS(0x11)
	Delay(200)

	start_time_reloadpoision := A_TickCount	; Bat dau tinh thoi gian nap mau
	start_time_killPVT := A_TickCount	; OUT game
	Bommana = 0
	Bommau = 0

;if (GetACC()=1)
Loop ; Vong lap chinh cua chuong trinh
       {	

		;Loop 20   ;Click 1 so lan nhat dinh sau do Xuong nap mau
              	{
		;IfWinNotExist, Priston	; Disconect thi log in lai
		;if (AutoLogin = "1")
			;{
			;Sleep, 5000
			;DangNhapPTV()
			;}

		WinActivate , Priston

		IfWinActive, Priston
		{
		SendKeyTomS(0x70) 	; F1 key
		}
		Loop, 2
		{
		loop, 15	; Tan cong QV theo phuong an lua chon
		{
		IfWinActive, Priston
		{
		if (CheckHeath(HP)=1) ; Kiem tra HP neu tut thi bom
			Bommana = 1
		else
			Bommau += 1
		if (Bommau >=100)
			{
			Bommana = 0
			Bommau = 0
			}

		if (KieuTanCong = "0")
			AutoClick1(MouseDelay)
		else if (KieuTanCong = "1")
			AutoClick2(Mouse_x, Mouse_y, MouseDelay)
		else if (KieuTanCong = "2")
			AutoClick1(MouseDelay)
		else
			AutoClickDetect()
		}
				; Kiem tra mau trong ong mau neu het thi ve lang
		IfWinActive, Priston
		if (getMau()=0)
			{
			WinActivate , Priston
			Sleep, 50
			if (getMau()=0)
			Velang(OutGameKhiVeLang, TatMayKhiVeLang)
			}	 		

		; -------------------------------------------Die ko mat %
		if (CheckNguyHiem()=1)
			{
			ThoatGameKhanCap()
			Sleep, 100
			SoundBeep , 600, 200
			Sleep, 50
			Break
			}
		}

		; --------------------------------------------------- bom STM
		CheckSTM(STM)
		; --------------------------------------------------- bom mana
		;if (Bommana=1)
		CheckMana(MANA)
		; ------------------------------------------------------------------
		}
		; //////////////////////////////// CHUYEN CAC SKILL KHAC /////////////////////////////
		IfWinActive, Priston
		If (GoiSoi="1")
		if (GetSoi()=0)
		GoiSoi()

		#Include %A_ScriptDir%\ChuyenSkill.txt

		IfWinActive, Priston
		loop, 10	; Tim va Nhat do
			{
			AutoClick1(MouseDelay)
			;AutoClickFind(MouseDelay)
			}

	}
	; ---------------------------------------- Kiem tra thoi gian toi han va nap mau
	elapsed_time := A_TickCount - start_time_reloadpoision
	if (elapsed_time >= TimeReloadPoision)
	IfWinActive, Priston
	{
	Delay(1000)
	Napmau(HP)
	start_time_reloadpoision := A_TickCount	; Khoi dong lai thoi gian nap mau
	IfWinActive, Priston
	If (OutParty="1")
	sendplay {Click 716, 410}   ; OUT Pty neu co'
	Delay(100)
	sendplay {Click 400, 338}
	;loop, 30
		;{
		;CheckHeath(HP) ; Kiem tra HP neu tut thi bom
		;Sleep, 100
		;}

	}
	; ------------------------------------------ Het phan Nap mau

	; ------------------------------------------ OUT Game
	elapsed_time1 := A_TickCount - start_time_killPVT
	if (elapsed_time1 >= 1800000)
		{
		start_time_killPVT := A_TickCount	; Khoi dong lai thoi gian
		WinKill, Priston			; Thoat game neu it QV qua
		}
	; ------------------------------------------ Het phan OUT Game
        }

;if (GetACC()=0)
;tooltip, STOP

}

; HET CHUONG TRINH CHINH //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ChuyenSkillSoi()
{
	mousemove 26, 48
	sleep 20
	click 2
	click
	mousemove 59, 48
	sleep 20
	click 2
	click
	mousemove 89, 48
	sleep 20
	click 2
	click
			; 89, 48      122, 48
}

GetSoi()
{
	PixelSearch, Px, Py, 30, 63, 130, 63, 0x543430, 3, Fast
	if ErrorLevel
	GL:=0	; Khong thay Mau lua chon
	else
	GL:=1	; Thay mau lua chon
    return GL
}

GoiSoi()
{
		SendKeyTomS(0x74) 	; F5 key
		sleep 80
		SendKeyTomS(0x74) 	; F5 key
		sleep 200
		Click Right 400, 338
		sleep 50
		Click Right 400, 338
		sleep 1000
		ChuyenSkillSoi()
}

; File: Click.txt      Chứa các hàm click

; ----------------------------------------------------------------------------------------
AutoClick2(MouseX,MouseY,MouseDelay)
{
	Xoaycamera()
	mousemove, MouseX, MouseY
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,Left
	Sleep, MouseDelay
}
; ----------------------------------------------------------------------------------------
; ----------------------------------------------------------------------------------------
AutoClick3(MouseDelay)	; chi danh chuot phai
{

	Xoaycamera()
	if (getManaSkill()=0) and (getSTMSkill()=0)
	SendKeyTomS(0x70) 	; F1 key
	else
	SendKeyTomS(0x77) 	; F8 key

	mousemove, 330, 328
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right

	mousemove, 470, 328
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right

	mousemove, 360, 340
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right

	mousemove, 440, 340
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right

	mousemove, 400, 328
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	;ControlClick, xMouseX yMouseY,Priston,,Left
}
; ----------------------------------------------------------------------------------------

; ----------------------------------------------------------------------------------------
AutoClick1(MouseDelay)	; Click 4 diem
{

	Xoaycamera()
	mousemove, 400, 328
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	mousemove, 350, 328
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	ControlClick, xMouseX yMouseY,Priston,,Left
	mousemove, 450, 328
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	ControlClick, xMouseX yMouseY,Priston,,Left
	mousemove, 350, 348
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	ControlClick, xMouseX yMouseY,Priston,,Left
	mousemove, 450, 348
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	ControlClick, xMouseX yMouseY,Priston,,Left
	mousemove, 400, 328
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right

}
; ----------------------------------------------------------------------------------------

; ----------------------------------------------------------------------------------------
AutoClickFind(MouseDelay)	; Click Tim kiem QV tam xa
{

	Xoaycamera()
	mousemove, 350, 318
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	mousemove, 450, 318
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	mousemove, 300, 318
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right
	mousemove, 500, 318
	CheckHeath(658)
	Sleep, MouseDelay
	ControlClick, xMouseX yMouseY,Priston,,right	

}
; ----------------------------------------------------------------------------------------
AutoClickDetect()
{
	mousemove 400, 338

	check:=getQV()

 if (check = 0)
	{
	Xoaycamera()
	}
else if (check = 1)
	{
	Dungcamera()
	ControlClick, xMouseX yMouseY,Priston,,right
	ControlClick, xMouseX yMouseY,Priston,,right
	ControlClick, xMouseX yMouseY,Priston,,Left
	}
else if (check = 2)
	{
	Xoaycamera()
	ControlClick, x470 y338,Priston,,Left
	Sleep, 80
	}
}

; ----------------------------------------------------------------------------------------

; -------------------------------------------------------------------
Xoaycamera()
{
	ControlGetText, ChatEdit, Edit1, Priston
	if !(ChatEdit<>"")
	{
      	VK_KEY= 0x25
	hwnd:=WinExist("Priston")
	DllCall("SendMessage", "UInt", hwnd, "int", 0x100, "Char", VK_KEY, "int", 0)
	}
}
; --------------------------------------------------------------------
Dungcamera()
{
      	 VK_KEY= 0x25
	hwnd:=WinExist("Priston")
	DllCall("SendMessage", "UInt", hwnd, "int", 0x101, "Char", VK_KEY, "int", 0)
}

;-------------------------------------------------------------------------------------------------------------

getQV()
{
	;KO Co QV 25 - co QV 69 - Lum do So khac

       PixelGetColor, color, 521, 411,Slow 	;Toa do chuot (400 338)
		;PixelGetColor, color, 617, 411,Slow		;Toa do chuot (475 338)
     			 ;MsgBox The color at the current cursor position is %color%
       StringMid, Q, color,7,1
        if (Q="2")
           QV:=0 		;ko co QV
         else if (Q="6")
           QV:=1 		; CO QV
        else
          QV :=2		;Lum do
    return QV
}
;----------------------------------------------------------------------------------------------------------------

; File: ChuyenSkill.txt                 Chứa hàm đổi Skill

		IfWinActive, Priston
		If (F2="1")
			{
			CheckHeath(HP)
			SendKeyTomS(0x71) 	; F2 key
			Delay(50)
			Click Right %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Click  %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Delay(TimeDelayChangeSkill)
			}
		IfWinActive, Priston
		If (F3="1")
			{
			CheckHeath(HP)
			SendKeyTomS(0x72) 	; F3 key
			Delay(50)
			Click Right %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Click  %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Delay(TimeDelayChangeSkill)
			}
		IfWinActive, Priston
		If (F4="1")
			{
			CheckHeath(HP)
			SendKeyTomS(0x73) 	; F4 key
			Delay(50)
			Click Right %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Click  %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Delay(TimeDelayChangeSkill)
			}
		IfWinActive, Priston
		If (F5="1")
			{
			CheckHeath(HP)
			SendKeyTomS(0x74) 	; F5 key
			Delay(50)
			Click Right %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Click  %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Delay(TimeDelayChangeSkill)
			}
		IfWinActive, Priston
		If (F6="1")
			{
			CheckHeath(HP)
			SendKeyTomS(0x75) 	; F6 key
			Delay(50)
			Click Right %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Click  %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Delay(TimeDelayChangeSkill)
			}
		IfWinActive, Priston
		If (F7="1")
			{
			CheckHeath(HP)
			SendKeyTomS(0x76) 	; F7 key
			Delay(50)
			Click Right %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Click  %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Delay(TimeDelayChangeSkill)
			}
		IfWinActive, Priston
		If (F8="1")
			{
			CheckHeath(HP)
			SendKeyTomS(0x77) 	; F8 key
			Delay(50)
			Click Right %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Click  %Mouse_x_CastSkill%, %Mouse_y_CastSkill%
			Delay(TimeDelayChangeSkill)
			}

		IfWinActive, Priston		; Tra ve skill F1
		SendKeyTomS(0x70) 	; F1 key

; File: DangNhapPTV.txt      Đây là hàm Auto login game

; /////////////////////// Log in PTV /////////////////////////////////////////////////////
#persistent 

DangNhapPTV()
{
	Batdau:

	ID = khavaq5
	Pass = tomxinh1

	;//////////////////////// Kiem tra tinh trang mang co online hay khong
	test = c:\test.txt
  	FileDelete, %test%
  	URLDownloadToFile, http://ptv.gate.vn/, %test% 	; Down thu tu trang chu PTV
  	if FileExist(Test)
  	{
 		;tooltip, online roi day
   	 	FileDelete, %test%
 	 }
	else
	Goto, Batdau	; ////////// Neu khong thi tro lai vi tri bat dau
	; ////////// Neu co online thi goi ptv chay
	sleep, 1000

	run, D:\Games\PTV\game.exe, D:\Games\PTV\, Max
	;WinWait, Priston
	sleep, 3000	; Cho 30 giay
	sendmode play
	Loop, 200	; Tim cua so nhap ID
	{
	WinActivate, Priston
	sendplay {click 400, 411}
	Sleep, 500
	PixelGetColor, color, 505, 455, Slow	; Chu D trong chu ID
	StringMid, R, color,7,2
	;tooltip, %color%
	if (R = "2F")	; May ban 30 ; Khong co ky tu chung
	Break
	}
	WinActivate, Priston
	IfWinActive, Priston
	{
	sendplay {click 400, 411}
	Sleep, 400
	sendplay {click 400, 411}
	Sleep, 400
	ControlSetText, , %ID%, Priston
	Sleep, 400
	sendplay {click 400, 463}
	Sleep, 400
	sendplay {click 400, 463}
	Sleep, 400
	ControlSetText, , %pass%, Priston
	Sleep, 400
	}

	Loop, 200	; Tim cua so chon may chu
	{
	WinActivate, Priston
	IfWinActive, Priston
	{
	sendplay {Click 331, 524}	: nut dang nhap
	Sleep, 500
	PixelGetColor, color1, 501, 457, Slow	; Chu m trong chu ma'y
	StringMid, R1, color1,5,2
	;tooltip, %color1%
	if (R1 = "A5")	; A5 chung
	Break
	}
	}

	Loop, 200	; Chon nhan vat
	{
	WinActivate, Priston
	IfWinActive, Priston
	{
	sendplay {Click 398, 432}	;Chon sever Anpha
	Sleep, 500
	PixelGetColor, color2, 462, 111, Slow	; Chu h trong chu Chon nhan vat
	StringMid, R2, color2,6,2
	;tooltip, %color2%
	if (R2 = "60")	; 60 chung
	Break
	}
	}

	;neu khong ket noi duoc voi sever Anpha thi lam lai
	{
	WinActivate, Priston
	Sleep, 500
	PixelGetColor, color2, 462, 111, Slow	; Chu h trong chu Chon nhan vat
	StringMid, R2, color2,6,2
	;tooltip, %color2%
	if (R2 <> "60")
		{
		Sleep,10000
		WinKill, Priston
		Sleep,10000
		WinKill, Priston
		Sleep,10000
		WinKill, Priston
		Goto, Batdau
		}
	}

	WinActivate, Priston
	IfWinActive, Priston
	{
	; Chon nhan vat o giua
	sendplay {Click 407, 361}
	sleep, 200
	sendplay {Click 407, 361}
	Sleep, 200
	; Bam nut xac nhan chon nhan vat
	sendplay {Click 349, 605}
	sleep, 200
	sendplay {Click 349, 605}
	Sleep, 200
	; Dong y tiep tuc voi nhan vat nay
	sendplay {Click 352, 485}
	sleep, 200
	sendplay {Click 352, 485}
	Sleep, 5000
	; Da log in xong. Tiep tuc dieu khien nhan vat chay toi vi tri can danh
	}
	Loop	; thay cot mau thi bat dau
	{
	WinActivate, Priston
	Sleep, 200
	 PixelGetColor, color, 420, 658, Slow
	StringMid, R, color,7,2
	if (R="FF")
	Break
	}
	WinActivate, Priston
	sleep, 50
; ---------------------------------------------------------------------------------------------------
	;MF1()
	ChienTruongCo()
	;HangThachNhu()
	;Ocdao()
	;DatCam()
	;SAN()
; ---------------------------------------------------------------------------------------------------
	sleep, 100
	ControlClick, x400 y338,Priston,,WD
	sleep, 100
	ControlClick, x400 y338,Priston,,WD
	sleep, 100
	ControlClick, x400 y338,Priston,,WD
	Sleep, 100
	sendplay {Click 165, 602}	; Chuyen che do chat clan

	WinSet, AlwaysOnTop, on, Priston	;Dat cua so Game ontop
	WinMaximize, Priston		; Dat cua so game maximize
	WinSetTitle, Priston Tale, , Priston Tale - Auto PTV 5.0 - Tu dong relog
}

; ----------------------------------------------------------

ChienTruongCo()
{
	sendplay {Click  380, 250}		; old 240 320
	sleep, 100			; {Click  500, 240} ctc
	sendplay {Click  380, 250}
	Sleep, 500
	sendplay {Click Down 380, 250}
	sleep, 5000
	Click UP
}
; ----------------------------------------------------------
HangThachNhu()
{
	sendplay {Click  571, 240}		;sendplay {Click  571, 240} htn
	sleep, 100			; {Click  500, 240} ctc
	sendplay {Click  571, 240}
	Sleep, 1000
	sendplay {Click Down 571, 240}
	sleep, 10000			; Hang thach nhu 10000 CTC 5000
	Click UP
}
; ----------------------------------------------------------

Ocdao()
{
	sendplay {Click  380, 200}
	sleep, 100
	sendplay {Click  380, 200}
	Sleep, 1000
	sendplay {Click Down  380, 200}
	sleep, 10000
	Click UP
}
MF1()
{
	sendplay {Click  500, 450}
	sleep, 100
	sendplay {Click  500, 450}
	Sleep, 300
	sendplay {Click Down  500, 450}
	sleep, 500
	Click UP
	sendplay {Click Down  530, 200}
	sleep, 11000
	Click UP
}

DatCam()
{
	sendplay {Click  480, 205}
	sleep, 100
	sendplay {Click  480, 205}
	Sleep, 1000
	sendplay {Click Down  480, 205}
	sleep, 14000
	Click UP
}
; ----------------------------------------------------------

SAN()
{
	sendplay {Click  420, 400}
	sleep, 200
	sendplay {Click  420, 400}
	Sleep, 1000
	sendplay {Click Down  420, 400}
	sleep, 3000
	Click UP
	sendplay {Click Down  490, 280}
	sleep, 11000
	Click UP
}

; File: HpStmMana.txt     Nhìn là biết nó liên quan đến cái gì rồi nhỉ 🙂 đặc biệt nó chứa thêm hàm send key ko bị Xtrap túm (Nhớ là Xtrap tại thời điểm tôi code cái này còn hiện tại thì không biết nó thế nào)

CheckDie()
{
PixelGetColor, color, 420, 730, Slow
StringMid, R, color,7,2
if (R<>"FF")
health:=1
else
health :=0
return health
}

CheckNguyHiem()
{
PixelGetColor, color, 420, 700, Slow
StringMid, R, color,7,2
if (R<>"FF")
health:=1
else
health :=0
return health
}

ThoatGameKhanCap()
{
	Process, Exist, game.exe
	PID := errorLevel
	Sleep, 30
	Process, Close, %PID%
}

getHealth(HP)
{
        	PixelGetColor, color, 420, %HP%, Slow	; Vi tri 1/3 cot mau
        	StringMid, R, color,7,2
       	 if (R<>"FF")
            health:=1
        else
          health :=0
    return health
}  

; ----------------------------------------------------------------------------------------
CheckHeath(HP)
		{
			if (getHealth(HP)=1)
				{
				ControlGetText, ChatEdit, Edit1, Priston
				if (ChatEdit<>"")
					{
					SendKeyTomS(0x1B)
					}
				SendKeyTomS(0x32) 	;Sendkey 2
				Sleep, 100
				health:=1
				WinMaximize, Priston	; Dat cua so game maximize
				if (getHealth(HP)=1)
				loop, 20
				   {
				   SendKeyTomS(0x32) 	;Sendkey 2
				   if (getHealth(HP)=0)
				   Break
				; -------------------------------------------Die ko mat %
				if (CheckNguyHiem()=1)
					{
					ThoatGameKhanCap()
					Sleep, 100
					SoundBeep , 600, 200
					Sleep, 50
					Break
					}

				   }
				}
		 	else
         			health :=0
		return health
		}

;------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------
getMana(MANA)
{
        PixelGetColor, color, 605, %MANA%, Slow
        StringMid, B, color,3,2
        if (B<>"FF")
            mana:=1
        else
          mana :=0
    return mana
}
;------------------------------------------------------------------------------------------------------------------
getManaSkill()
{
        PixelGetColor, color, 605, 715, Slow
        StringMid, B, color,3,2
        if (B<>"FF")
            mana:=1
        else
          mana :=0
    return mana
}
getSTMSkill()
{
        PixelGetColor, color, 395, 715, Slow
        StringMid, G, color,5,2

        if (G<>"FF")
            stamina :=1
        else
            stamina :=0

    return stamina
}
;------------------------------------------------------------------------------------------------------------------
CheckMana(MANA)
{
			if (getMana(MANA)=1)
			{
			SendKeyTomS(0x33)
			}
}

; --------------------------------------------------------------------------------------------------------

getSTM(STM)
{
        PixelGetColor, color, 395, %STM%, Slow
        StringMid, G, color,5,2

        if (G<>"FF")
            stamina :=1
        else
            stamina :=0

    return stamina
}
;------------------------------------------------------------------------------------------------------------------

CheckSTM(STM)
{
		if (getSTM(STM)=1)
			{
			SendKeyTomS(0x31)
			}
}
; -------------------------------------------------------------------------------------------

getMau()
; ----------------------------------------------------------------------------------------
{
        PixelGetColor, color, 686, 716,Slow
        StringMid, H, color,7,1
			;MsgBox The color at the current cursor position is %H%
      			;  (686 716 14) (686 717 12)  (686 715 F1)
        if (H="1")
            Mau:=0 		;Het mau
        else if (H="0")
            Mau:=0 		;Het mau
        else
            Mau :=1		;Con mau
    return Mau
}  

;----------------------------------------------------------------------------------------------------------------

Delay(TimeDelay)
{
	start_time := A_TickCount
	loop
	{
	elapsed_time := A_TickCount - start_time
	if (elapsed_time >= TimeDelay)
	break
	}

}

; -----------------------------------------------------------------
SendKeyTomS(VK_KEY)
{
      	;VK_KEY = 0x32
	hwnd:=WinExist("Priston")
	DllCall("SendMessage", "UInt", hwnd, "int", 0x100, "Char", VK_KEY, "int", 0)
	Sleep, 50
	DllCall("SendMessage", "UInt", hwnd, "int", 0x101, "Char", VK_KEY, "int", 0)
	Sleep, 20
	DllCall("SendMessage", "UInt", hwnd, "int", 0x101, "Char", VK_KEY, "int", 0)
}
; -----------------------------------------------------------------
SendKeyTomSD(VK_KEY)
{
      	;VK_KEY = 0x32
	hwnd:=WinExist("Priston")
	DllCall("SendMessage", "UInt", hwnd, "int", 0x100, "Char", VK_KEY, "int", 0)
}
; -----------------------------------------------------------------
SendKeyTomSU(VK_KEY)
{
      	;VK_KEY = 0x32
	hwnd:=WinExist("Priston")
	DllCall("SendMessage", "UInt", hwnd, "int", 0x101, "Char", VK_KEY, "int", 0)
	Sleep, 20
	DllCall("SendMessage", "UInt", hwnd, "int", 0x101, "Char", VK_KEY, "int", 0)
}
; -------------------------------------------------------------------

; File: NapMauVaVeLang.txt     Chưá các hàm nạp máu và về làng khi hết POT

; ----------------------------------------------------------------------------------------

Velang(OutGame, TatMay)
{
	Click 400, 50
	Sleep, 100
	Click 400, 50
                Sleep, 50
	SendKeyTomS(0x56)	; Phim V	 ;Mo thung do
	Sleep, 200

	sendplay {Click Right 42, 495}
	sendplay {Click Right 42, 495}
	sendplay {Click Right 42, 495}
	send {Left up}
	Sendplay {Space}  ;dong thung do lai
	Sendplay {Space}
	Sendplay {Space}
;Lam lai lan 2
	Click 400, 50
	Sleep, 50
	Click 400, 50
                                   ;Mo thung do
	SendKeyTomS(0x56)	; Phim V
	Sleep, 200

	sendplay {Click Right 42, 495}
	sendplay {Click Right 42, 495}
	sendplay {Click Right 42, 495}
	send {Left up}
	Sendplay {Space}  ;dong thung do lai
	Sendplay {Space}
	Sendplay {Space}

	; ----------------------- Thoat khoi game -------------------------
	If (OutGame="1")
		{
		Sleep, 10000
		WinKill, Priston Tale
		Sleep, 10000
		WinKill, Priston Tale
		Sleep, 10000
		WinKill, Priston Tale
		}
	If (TatMay="1")
		{
		Shutdown, 1
		}	

	Reload
}
; ----------------------------------------------------------------------------------------

Napmau(HP)
{
	CheckHeath(HP)
	Sleep, 500

	CheckHeath(HP)
	                   ;mo thung do Nap mau vao o so2 STM so 1 mana so 3
	SendKeyTomS(0x20)	; Phim cach Space
	SendKeyTomS(0x20)	; Phim cach Space
	Sleep, 50
	SendKeyTomS(0x56)	; Phim V
			CheckHeath(HP)
	Sleep, 500
	mousemove 34, 474 	;Nap mau
	mousemove 34, 474 	;Nap mau
	Sleep, 150
	SendKeyTomSD(0x10)	; De phim Shift
	SendKeyTomS(0x32)	; Nhan phim 2
	SendKeyTomSU(0x10)	; Nha phim Shift
	Delay(80)
			CheckHeath(HP)
	mousemove 53, 474 	; nap STM
	mousemove 53, 474 	; nap STM
	Sleep, 150
	SendKeyTomSD(0x10)	; De phim Shift
	SendKeyTomS(0x31)	; Nhan phim 1
	SendKeyTomSU(0x10)	; Nha phim Shift
			CheckHeath(HP)
 	mousemove 34, 516 	;Nap mana
 	mousemove 34, 516 	;Nap mana
	Sleep, 150
	SendKeyTomSD(0x10)	; De phim Shift
	SendKeyTomS(0x33)	; Nhan phim 2
	SendKeyTomSU(0x10)	; Nha phim Shift
	Sleep, 80
			CheckHeath(HP)
	mousemove 53, 516 	; nap mana
	mousemove 53, 516 	; nap mana
	Sleep, 150
	SendKeyTomSD(0x10)	; De phim Shift
	SendKeyTomS(0x33)	; Nhan phim 2
	SendKeyTomSU(0x10)	; Nha phim Shift
	Sleep, 150
			CheckHeath(HP)
	SendKeyTomS(0x20)	; Phim cach Space
	SendKeyTomS(0x20)	; Phim cach Space

			CheckHeath(HP)
mousemove 400, 338
}

;-------------------------------------------------------------------------------------

;-------------------------------------------------------------------------------------

CUỐI CÙNG LÀ HƯỚNG DẪN BIÊN DỊCH

Buoc 1: Xoa 2 file AutoPTV3.x.exe dang co san di de bien dich lai

Buoc 2: - Mo File ID.txt
 - Copy 2 dong nhu sau:
 ; --------------------------------------
 if (OutputVar = "khavaq")
 TrueACC:=1
 ;---------------------------------------
 - Paste 2 dong nay vao vi tri chen them ID moi nhu vi du phia duoi
 - Sua ID (khavaq) thanh ID ban muon bo sung

 ; ----------------------------------------- Day la Function kiem tra ID
 GetACC() 
 {
 TrueACC:=0
 RegRead, OutputVar, HKEY_LOCAL_MACHINE, SOFTWARE\Triglow Pictures\PristonTale, Account

 if (OutputVar = "khavaq")
 TrueACC:=1

 ; Cac ID tiep theo ......

 ; vi tri chen them ID moi

 return TrueACC

Buoc 3: 
 - Thoat khoi va luu lai File ID.txt da chen them 2 dong ID moi
 - Chay file CompileAutoPTV.bat de compile thanh 2 file AutoPTV3.x.exe va File Active.exe 
 - Gui di 3 file AutoPTV3.x.exe va File Active.exe va AutoPtv.ini

Chu y quan trong:
 - Khong gui them bat cu file nao khac 3 file AutoPTV3.x.exe va File Active.exe va AutoPtv.ini
 - Cac file con lai la ma nguon cua chuong trinh va cac file can thiet de bien dich.
 - Khi bo sung ID chu y copy va paste that can than khong duoc de thua bat cu ky tu nao
 - Chuc may man!
 

11 responses to “Hướng dẫn viết auto PTV bằng autohotkey

  1. Tim

    25/12/2011 at 9:01 chiều

    anh oi RPT co auto duoc ko anh

     
    • khavaq

      26/12/2011 at 7:38 sáng

      Bạn down cái auto RPT bên mục Soft về thử xem, cái đó viết cho RPT hơi lâu rồi không biết còn chạy được không hay GM bên đó Fix lại rồi

       
  2. Tim

    26/12/2011 at 11:02 chiều

    cảm ơn a e dùng dc rồi hihii, e chỉ cần bơm máu +mana + stm thôi e dang test mấy chức năng khác hy vọng a sẽ sớm hoàn thiện thanks a

     
  3. Tim

    27/12/2011 at 7:40 chiều

    A ơi cho e xin cái auto của pris với buff + bơm… thanks a nhiều

     
    • khavaq

      28/12/2011 at 7:54 sáng

      Chỉ có 1 bản auto đó cho RPT thôi, Mình ko chơi RPT nên chỉ code cho vui thế thôi, Hiện giờ bận rộn nên không có thời gian làm tiếp.

       
  4. toro (k4tc09)

    01/07/2012 at 1:43 chiều

    em muốn học để viết đc chương trình này ghê, tâm huyết với ptv lắm nhưng bi giải thể mất rồi, giờ thì tìm pt nước ngoài chơi tập viết code để làm 1 cái auto cho riêng mình sẵn học hỏi luôn, nếu anh giúp đc có thể cho em tài liệu nào cần thiết để viết code ko, thanks anh rất nhiều

     
    • khavaq

      01/07/2012 at 8:55 chiều

      Doc help kem theo autohotkey thoi. No la ngon ngu scrip don gian thoi ma. Cu theo chuong trinh mau sua lai theo y muon la dc.
      Chuc thanh cong

       
  5. toro (k4tc09)

    02/09/2012 at 9:07 chiều

    anh kha em có thắc mắc nhiều lắm mà ko hỏi anh trực tiếp đc, nếu anh có thể trả lời ở đây đc thì giúp em nhé, em đọc hết những phần trên rồi nhưng ko hiểu cách anh chèn vào khung ra sao, mình có cần dùng chương trình smartgui để tạo ra cái bản auto rồi chèn vào ko anh, và chèn làm sao cho nó có thể click vào để chọn skill như F1 F2… như những bản auto khác ?, còn nữa những ct anh làm ở trên em thấy nó đơn giản ở chổ anh có thể ghi “qv” rồi “mana” …. những cái đó auto nó tự hiểu đc hả anh hay đó là chổ để chèn code tương tự vào đó, anh có thể làm 1 clip để em có thể nghiên cứu và làm theo ko hix em làm mấy tháng nay rùi nhưng ko đc gì, anh bỏ chút thời gian giúp em đc ko em thật sự rất thích và muốn làm 1 cái có gì anh pm yh havilkoro@yahoo.com nha chào anh

     
  6. phan minh

    17/09/2012 at 4:48 chiều

    có code auto WAIT FOR LOAD khong anh??

     
  7. Love

    23/09/2012 at 6:36 chiều

    Bạn ơi dạy mình được k . mình muốn làm auto audition bạn làm dc k ? cho mình hỏi cách tìm 1 tọa độ nào đó của game ntn ??

     
  8. anhvu

    28/07/2013 at 1:12 sáng

    Đang cần thì mò google ra được cái này, nhưng mà máy tính nó báo active.bin có keyloger là sao nhỉ, chẹp