【python】python制作暗黑2 建号器

问题

暗黑2,是《暗黑破坏神2》的简称,是美国暴雪娱乐研发的一款动作类角色扮演游戏,于2000年上市。

下文介绍如何使用python制作暗黑2建号器脚本,以代替重复与繁琐的手工操作。

注意:以下代码只作为学习使用,如产生法律后果与商业损失,后果自负。

步骤

步骤一、采集暗黑2游戏窗口数据

1、首先先设定平面坐标轴,蓝色区域为暗黑2窗口。

现在,笔记本或者台式机分辨率普遍比较高(例如:1920*1080),暗黑2窗口化后无法占满屏幕,呈现如下图所示情形。

设定屏幕左上角为原点(0,0),需要调用GetWindowRect()计算暗黑2窗口左上角(w_x,w_y)以及窗口的宽度(w_w)和高度(w_h)。

 2、窗口采集函数需要输出四个参数,分别为w_x,w_y,w_w,w_h。

def get_d2_window_param():
	a = u"D2Loader v1.11b - Build On Nov 11 2005"
	#a = u"无标题 - 画图"

	hwnd = win32gui.FindWindow(None, a)
	print("句柄:", hwnd, "标题:", win32gui.GetWindowText(hwnd))
	rect = win32gui.GetWindowRect(hwnd)
	#win32gui.SetWindowText(hwnd, "A")
	#win32gui.SetForegroundWindow(hwnd)

	w = (rect[2] - rect[0])
	h = (rect[3] - rect[1])

	print("w = ", w)
	print("h = ", h)

	return rect[0], rect[1], w, h

步骤二、采集游戏界面关键控件的比例数据。

1、过场动画后,第一张游戏界面关键控件是【BATTLE.NET】按钮 和 【离开暗黑破坏神II】按钮。

使用抓图软件抓取游戏窗口,然后使用windows系统自带【画图】工具查看控件所在坐标。

控件x轴y轴
【BATTLE.NET】按钮504 / 1008 = 0.5000470 / 786 = 0.5979
【离开暗黑破坏神II】按钮504 / 1008 = 0.5000720 / 786 = 0.9160

表格内运算的结果表示:控件在游戏窗口内以左上角为原点的比例位置。

2、点击【BATTLE.NET】按钮后,进入第二张游戏界面。关键的控件有:【密码】编辑框 和【登录】按钮 。

控件x轴y轴
【密码】编辑框504 / 1008 = 0.5000520 / 786 = 0.6615
【登录】按钮504 / 1008 = 0.5000620 / 786 = 0.7888

3、点击【登录】按钮后,进入第三张角色管理界面,关键控件有:【创建新人物】按钮 和【离开】按钮 。

控件x轴y轴
【创建新人物】按钮148 / 1008 = 0.1468656 / 786 = 0.8346
【离开】按钮125 / 1008 = 0.1240726 / 786 = 0.9236

4、点击【创造新人物】后,进入第四张角色选择界面,关键控件:【资料片人物】单选框与【好】按钮。

控件x轴y轴
【资料片人物】单选框410 / 1008 = 0.4067696 / 786 = 0.8855
【好】按钮868 / 1008 = 0.8611728 / 786 = 0.9262

5、点击【好】按钮后,进入战网游戏大厅,关键控件:【结束】按钮。

控件x轴y轴
【结束】按钮920 / 1008 = 0.9126630 / 786 = 0.8015


步骤三、主要功能函数

主要功能函数包括:登录暗黑2游戏函数load_d2()、登录账号函数login_account()以及创建角色函数create_char()。

1、登录游戏。

def load_d2():
	'''登录Diablo II游戏'''
	print("Load Diablo II ...")
	
	print(os.getcwd())
	
	os.chdir("d:\Documents\Games\Diablo II")
	#os.system(r'start 91D2Loader.exe -w -pdir -ns')
	os.system(r'start 91D2Loader.exe -w -skiptobnet -ns')
	
	#os.chdir('c:\windows\system32')
	#os.system(r'start mspaint.exe')
	#os.system(r'start notepad.exe')

	time.sleep(3)

2、登录账号

def login_account(username, password='******'):
	'''登录账户'''
	print("Login Account ...")

	#鼠标点击【BATTLE.NET】按钮
	click_and_sleep(w_x+int(w_w*0.5000), w_y+int(w_h*0.5979), 2)

	#鼠标点击【密码】编辑框,移动光标至【密码框】
	click_and_sleep(w_x+int(w_w*0.5000), w_y+int(w_h*0.6615), 1)

	#按tab键切换光标,移动光标至【账户名称】。如果有默认账户,则自动全选。
	k.press_key(k.tab_key)
	time.sleep(1)
	
	#删除旧账户
	k.press_key(k.backspace_key)
	time.sleep(1)
	
	#输入新账号
	k.type_string(username)
	time.sleep(1)

	#移动光标至【密码框】
	k.press_key(k.tab_key)
	time.sleep(1)

	#输入密码
	k.type_string(password)
	time.sleep(1)

	#点击【登录】按钮
	click_and_sleep(w_x+int(w_w*0.5000), w_y+int(w_h*0.7888), 1)

3、创建角色

def create_char(account_name):
	print("Create char ...")
	first_name = account_dict[account_name][0]
	char_occupation = account_dict[account_name][1]

	#for i in ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']:
	for i in ['a', 'b']:
		click_and_sleep(w_x+int(w_w*0.1468), w_y+int(w_h*0.8346), 1)
		click_and_sleep(w_x+char_dict[char_occupation][0]*int(w_w/8), w_y+int(w_h/2), 1)

		char_name = 'zx_' + first_name + i
		k.type_string(char_name)
		time.sleep(1)

		#去掉勾选【资料片任务】
		click_and_sleep(w_x+int(w_w*0.4067), w_y+int(w_h*0.8855), 1)
		
		#点击【好】按钮
		click_and_sleep(w_x+int(w_w*0.8611), w_y+int(w_h*0.9262), 1)
		
		#点击【退出】按钮
		click_and_sleep(w_x+int(w_w*0.9126), w_y+int(w_h*0.8015), 1)

	#点击【离开】按钮
	click_and_sleep(w_x+int(w_w*0.1240), w_y+int(w_h*0.9236), 1)

4、鼠标点击后等待函数

def click_and_sleep(x, y, seconds):
	'''点击并暂停'''
	m.move(x, y)
	m.click(x, y, 1)
	time.sleep(seconds)

步骤四、主程序

# coding=utf-8
from pykeyboard import PyKeyboard
import win32api, win32con, win32gui
import time
import os

if __name__ == "__main__":
	
	m = PyMouse()
	k = PyKeyboard()

	account_dict = {'acc01':('A', 'bar'), 'acc02':('B', 'sor'), }
	#account_dict = {'acc01':('a', 'ama')}
	char_dict = {'ama': (1, 4), 'ass': (2, 4), 'nec': (3, 4), 'bar': (4, 4), 'pal': (5, 4), 'sor': (6, 4), 'dru': (7, 4)}

	#登录暗黑2
	load_d2()

	#获取窗口参数
	w_x, w_y, w_w, w_h = get_d2_window_param()

	for key in account_dict:
		#登录账号
		login_account(key)
		
		#建号
		create_char(key)

	#点击【离开暗黑破坏神II】按钮
	click_and_sleep(w_x+int(w_w*0.5000), w_y+int(w_h*0.9160), 1)

	print("end ...")

参考博客:Python:批量创建暗黑2的RR小号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值