python写梦幻西游脚本精灵_python写的梦幻手游辅助工具,非外 挂
本帖最后由 天福 于 2015-3-5 10:58 編輯
寫的一般都是B/S的東西,第一次寫C/S:
一般功能:
1.夢幻西游手游10個(gè)鬼抓完自動(dòng) 領(lǐng) 取下一輪
2.自動(dòng) 領(lǐng) 取 隊(duì)長禮盒和使用
3.自動(dòng)打圖
附加功能:
寫完之后因?yàn)榻o群內(nèi)小伙伴用的,就做了個(gè)加密,對軟件加密也是學(xué)習(xí)和愛好,免得用不上我的 大 B /S
可以控制這個(gè)軟件有一個(gè)固定的密碼,錯(cuò)誤不讓操作,服務(wù)端可以隨時(shí)改密碼
也可以服務(wù)端控制這個(gè)軟件每幾分鐘自動(dòng)給自己變換密碼,每次點(diǎn)開軟件都需要找我索要密碼,保證軟件不會(huì)傳播出去
本人初學(xué)者,僅供一起交流學(xué)習(xí)
**1. **
**2. 代碼**
#!/usr/bin/python
# coding=utf-8
# 夢幻手游輔助-by 專業(yè) 20150215
from __future__ import division
import sys,os
import threading
import win32api,win32gui,win32con
import ImageGrab
import time,datetime,string
import autopy
import urllib2
import hashlib
import wx
salt = '******'
sign = '******'
ver = '1.0'
defPwd = '******'
threads = []
isStart = True
def startTh():
global isStart
for t in threads:
t.setDaemon(True)
t.start()
def endAllTh(param):
global isStart
isStart = False
def md5Val(src):
myMd5 = hashlib.md5()
myMd5.update(src)
myMd5_Digest = myMd5.hexdigest()
return myMd5_Digest
#校驗(yàn)密碼
def CheckPwd():
if(valArr != ver):
win32api.MessageBox(0,u'不是最新版本,請更新')
exit()
mdVal = md5Val(serverArr salt)
if(mdVal != serverArr):
win32api.MessageBox(0,u'操作失敗,請重試')
exit()
if(valArr == '1'):
nTime = string.atof(valArr) #字符串轉(zhuǎn)浮點(diǎn)
nDate = time.strftime('%Y-%m-%d %H:00:00',time.localtime(nTime));
nDate = datetime.datetime.strptime(nDate,"%Y-%m-%d %H:%M:%S")
nDate = time.mktime(nDate.timetuple())
limi = string.atoi(valArr)
diff = int((nTime - nDate)/limi)*limi
date1 = '%d'%(nDate diff)
pwd1 = md5Val(md5Val(date1) valArr sign)
pwd1 = pwd1
date2 = '%d'%(nDate diff - limi)
pwd2 = md5Val(sign)
pwd2 = pwd2
else:
pwd1 = md5Val(sign)
pwd1 = pwd1;
pwd2 = pwd1
if(frame.doPwd.GetValue() == pwd1 or frame.doPwd.GetValue() == pwd2):
return True
else:
win32api.MessageBox(0,u'口令錯(cuò)誤')
exit()
def initWin():
if (hmw > 0):
win32gui.SetWindowPos(hmw,win32con.HWND_TOPMOST,0,0,640,362,win32con.SWP_SHOWWINDOW)
return True
else:
win32api.MessageBox(0,u'沒有檢測到最新的海馬玩模擬器窗口')
return False
def closeMhxy():
mhName = u"夢幻手游輔助v" ver
mhwin = win32gui.FindWindow(None,mhName)
if(mhwin > 0):
win32api.PostMessage(mhwin, win32con.WM_QUIT, 0, 0)
def closeWin():
#autopy.mouse.smooth_move(1255, 8)#最大化
autopy.mouse.smooth_move(610, 10)
time.sleep(1)
autopy.mouse.click()
time.sleep(1)
#autopy.mouse.smooth_move(580, 450)#最大化
autopy.mouse.smooth_move(260, 245)
time.sleep(1)
autopy.mouse.click()
return True
def closePC():
autopy.mouse.smooth_move(27, 783)
time.sleep(1)
autopy.mouse.click()
time.sleep(1)
autopy.mouse.smooth_move(303, 740)
time.sleep(1)
autopy.mouse.click()
return True
def oneKeyDo(param):
win32api.MessageBox(0,u'待開發(fā)')
return True
#打圖
def daTu():
global isStart
if(isStart == False):
time.sleep(5)
while isStart:
if(frame.setRows.GetValue() == '1'):
autopy.mouse.smooth_move(540, 125)
elif(frame.setRows.GetValue() == '2'):
autopy.mouse.smooth_move(540, 168)
elif(frame.setRows.GetValue() == '3'):
autopy.mouse.smooth_move(540, 214)
else:
win32api.MessageBox(0,u'行號超出范圍')
return False
time.sleep(1)
autopy.mouse.click() # 單擊 `
time.sleep(3)
isStart = True
return True
#抓鬼
def zhuaGui():
global isStart
if(isStart == False):
time.sleep(20)
width = 20
height = 20
t = 0
while isStart:
#box = (605, 435, 605 50, 435 50)
box = (310, 215, 310 width, 215 height)
img = ImageGrab.grab(box)
cont = 0
for h in range(0, height):
for w in range(0, width):
pix = img.getpixel((w, h))
if ((abs(237 - pix) <= 30) and (abs(224 - pix) <= 30) and (abs(207 - pix) <= 30)):
cont = cont 1
del img
if((cont/(height*width)) > 0.6):
t = 0
#autopy.mouse.move(730, 460)
autopy.mouse.smooth_move(372, 222)
time.sleep(1)
autopy.mouse.click()
time.sleep(5)
#autopy.mouse.toggle(True) # 按下左鍵
#autopy.mouse.toggle(False) # 松開左鍵
autopy.mouse.smooth_move(512, 222)
time.sleep(1)
autopy.mouse.click()
time.sleep(1)
#autopy.mouse.smooth_move(1090, 260)
if(frame.setRows.GetValue() == '1'):
autopy.mouse.smooth_move(550, 126)
elif(frame.setRows.GetValue() == '2'):
autopy.mouse.smooth_move(540, 170)
else:
win32api.MessageBox(0,u'行號超出范圍')
return False
time.sleep(1)
autopy.mouse.click()
time.sleep(1)
if(frame.setRows.GetValue() == '1'):
autopy.mouse.smooth_move(550, 126)
elif(frame.setRows.GetValue() == '2'):
autopy.mouse.smooth_move(540, 170)
else:
win32api.MessageBox(0,u'行號超出范圍')
return False
time.sleep(1)
autopy.mouse.click()
time.sleep(1)
else:
box = (500, 285, 544, 304)
img = ImageGrab.grab(box)
cont = 0
for h in range(0, 19):
for w in range(0, 44):
pix = img.getpixel((w, h))
if ((abs(240 - pix) <= 30) and (abs(200 - pix) <= 30) and (abs(100 - pix) <= 30)):
cont = cont 1
del img
if(cont/836 > 0.5):
autopy.mouse.move(520, 295)
autopy.mouse.click()
time.sleep(1)
autopy.mouse.click()
t = t 1
if(t > 1000):
break
else:
#autopy.mouse.move(1134, 146)#桌面空白
#autopy.mouse.click()
time.sleep(5)
isStart = True
return True
#closeWin()
#closePC()
#打圖線程
def daTuTh(param):
allThs(param,daTu)
#抓鬼線程
def zhuaGuiTh(param):
allThs(param,zhuaGui)
#線程管理
def allThs(param,someDo):
endAllTh(param)
if(CheckPwd() != True):
return False
#if(initWin() == False):
# return False
#frame.OnIconfiy(param)#最小化
t = threading.Thread(target=someDo)
threads.append(t)
startTh()
class TaskBarIcon(wx.TaskBarIcon):
ID_About = wx.NewId()
ID_Minshow=wx.NewId()
ID_Maxshow=wx.NewId()
ID_Closeshow=wx.NewId()
def __init__(self, frame):
wx.TaskBarIcon.__init__(self)
self.frame = frame
self.SetIcon(wx.Icon(name='mhxy.ico', type=wx.BITMAP_TYPE_ICO), u'夢幻手游輔助工具') #wx.ico為ico圖標(biāo)文件
self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnTaskBarLeftDClick) #定義左鍵雙擊
self.Bind(wx.EVT_MENU, self.OnAbout, id=self.ID_About)
self.Bind(wx.EVT_MENU, self.OnMinshow, id=self.ID_Minshow)
self.Bind(wx.EVT_MENU, self.OnMaxshow, id=self.ID_Maxshow)
self.Bind(wx.EVT_MENU, self.OnCloseshow, id=self.ID_Closeshow)
def OnTaskBarLeftDClick(self, event):
if self.frame.IsIconized():
self.frame.Iconize(False)
if not self.frame.IsShown():
self.frame.Show(True)
self.frame.Raise()
def OnAbout(self,event):
wx.MessageBox(u'夢幻手游輔助工具v' ver u'-"夢幻"群內(nèi)部使用', u'關(guān)于工具')
def OnMinshow(self,event):
self.frame.Iconize(True)
def OnMaxshow(self,event):
if self.frame.IsIconized():
self.frame.Iconize(False)
if not self.frame.IsShown():
self.frame.Show(True)
self.frame.Raise()
#self.frame.Maximize(True) #最大化顯示
def OnCloseshow(self,event):
self.frame.Close(True)
# 右鍵菜單
def CreatePopupMenu(self):
menu = wx.Menu()
#menu.Append(self.ID_Minshow, u'最小化')
menu.Append(self.ID_Maxshow, u'顯示窗口')
menu.Append(self.ID_About, u'關(guān)于工具')
menu.Append(self.ID_Closeshow, u'退出')
return menu
class Frame(wx.Frame):
def __init__(self, parent=None, id=wx.ID_ANY,title=u"夢幻手游輔助v" ver,pos=None,size=(400,300),style=wx.**_MENU|wx.MINIMIZE_BOX|wx.CLOSE_BOX|wx.CAPTION):
wx.Frame.__init__(self, parent, id, title, pos, size, style)
self.SetIcon(wx.Icon('mhxy.ico', wx.BITMAP_TYPE_ICO))
panel = wx.Panel(self, wx.ID_ANY)
self.taskBarIcon = TaskBarIcon(self)
# 綁定事件
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Bind(wx.EVT_ICONIZE, self.OnIconfiy) # 窗口最小化時(shí),調(diào)用OnIconfiy,注意Wx窗體上的最小化按鈕,觸發(fā)的事件是 wx.EVT_ICONIZE,而根本就沒有定義什么wx.EVT_MINIMIZE,但是最大化,有個(gè)wx.EVT_MAXIMIZE。
self.tripText3 = wx.StaticText(panel,wx.ID_ANY,label=u'輔助的操作在任務(wù)欄第幾行?:',pos=(0, 10))
self.tripText3.SetFont(wx.Font(16, wx.SWISS, wx.NORMAL, wx.NORMAL))
self.setRows= wx.TextCtrl(panel,wx.ID_ANY,pos=(290,10),size=(90,25))
self.setRows.SetValue('1');
self.tripText2 = wx.StaticText(panel,wx.ID_ANY,label=u'在點(diǎn)下任務(wù)之前,先確定此處的任務(wù)欄行正確與否',pos=(25, 30))
self.oneKeyAutoDo = wx.Button(panel,wx.ID_ANY,label=u"一鍵自動(dòng)任務(wù)",pos=(10,60),size=(80,25))
self.autoZhuaGui = wx.Button(panel,wx.ID_ANY,label=u"自動(dòng)帶隊(duì)抓鬼",pos=(95,60),size=(80,25))
self.autoDaTu = wx.Button(panel,wx.ID_ANY,label=u"自動(dòng)打圖",pos=(180,60),size=(80,25))
self.endDo = wx.Button(panel,wx.ID_ANY,label=u"停止操作",pos=(265,60),size=(80,25))
self.Bind(wx.EVT_BUTTON, oneKeyDo, self.oneKeyAutoDo)
self.Bind(wx.EVT_BUTTON, zhuaGuiTh, self.autoZhuaGui)
self.Bind(wx.EVT_BUTTON, daTuTh, self.autoDaTu)
self.Bind(wx.EVT_BUTTON, endAllTh, self.endDo)
self.tripText1 = wx.StaticText(panel,wx.ID_ANY,label=u'請?jiān)诖溯斎肟騼?nèi)輸入操作口令:',pos=(0, 160))
self.tripText1.SetFont(wx.Font(16, wx.SWISS, wx.NORMAL, wx.NORMAL))
self.doPwd= wx.TextCtrl(panel,wx.ID_ANY,pos=(290,160),size=(90,25))
self.doPwd.SetValue(defPwd);
if( valArr == '1' ):
pwTrip = u'令牌模式'
else:
pwTrip = u'密碼模式'
self.tripText2 = wx.StaticText(panel,wx.ID_ANY,label=u'當(dāng)前口令模式:' pwTrip u'——一般此處一般勿動(dòng)',pos=(25, 180))
self.tripText5 = wx.StaticText(panel,wx.ID_ANY,label=u'注:\n口令分為:密碼模式和令牌模式\n密碼模式:一般不用改,如果提示錯(cuò)誤,群內(nèi)公告有最新口令,\n令牌模式:每幾分鐘自動(dòng)變換口令,需要群內(nèi)吼一聲',pos=(25, 200))
def OnHide(self, event):
self.Hide()
def OnIconfiy(self, event):
self.Hide()
event.Skip()
def OnClose(self, event):
self.taskBarIcon.Destroy()
self.Destroy()
def OnCloseMe(self, event):
self.SetBackgroundColour('Red')
self.Refresh()
if __name__ == '__main__':
closeMhxy()
try:
servetStr = urllib2.urlopen("http://www.baidu.com/").read()
except:
win32api.MessageBox(0,u'啟動(dòng)失敗,請檢查游戲網(wǎng)絡(luò)')
exit()
#校驗(yàn)通訊
serverArr = servetStr.split(',')
valArr = serverArr.split('|')
#winName = u'海馬玩模擬器(Droid4X) 0.7.3 Beta'
winName = valArr.decode("UTF-8", 'ignore');
hmw = win32gui.FindWindow(None,winName)
app = wx.App()
frame = Frame(size=(400, 300))
frame.Centre()
frame.Show()
app.MainLoop()
總結(jié)
以上是生活随笔為你收集整理的python写梦幻西游脚本精灵_python写的梦幻手游辅助工具,非外 挂的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SRS4.0源码分析-调试环境搭建
- 下一篇: 梦幻西游python验证成语_GitHu