这是我用此模板做的一个无心宠物外挂:
===========================================================
<?xml version="1.0" encoding="gb2312" ?>
<ApeML LID="CHS" MD="0" 抓屏模式="0" 名称="WEB操作自动机类程序代码模版" 作者="roking" 信息窗口="2" 速度="10" 循环次数="1" 自定义属性="运行提示=正在运行,运行次数=0">
<!--whosay2006@163.com-->
<脚本区块 语言="LAScript" 名称="init" 延时="0" 启用="true" 编辑密钥="" 运行公钥="">
<![CDATA[
--[[说明:
当使用模拟精灵编写WEB自动操作这一类应用程序时,按下面模版的示例程序结构进行修改,有利于把自动操作过程中
各个环节的处理独立出来,使不同的处理功能模块化,使程序易写、易读、易调试。
by roking
2006.08.06
--]]
------------------------------------- 全局变量定义区 ---------------------------------------------
mapurl="http://bbs.chinapyg.com/pet.php?index=fight&mapid=17";
wbTarget = nil; --要自动操作的web页面所在的web对象
strHtml = nil; --目标页面中的“原始”html(未经web对象解析转换过的)
bReady = nil; --web.loadProc回调函数是否准备好执行wbTarget对象的回调事件,可在任何时候令bReady=false暂停回调函数功能的执行
_DLCTL_RESYNCHRONIZE= 0x00002000 --服务器将会被请求更新状态。如果服务器指出缓存信息是最新的,将会使用 缓存文件
_DLCTL_PRAGMA_NO_CACHE = 0x00004000 --不管文件的更新状态如何,文件都会被从服务器重新下载
myMP = 0;
myMP_MAX=0;
cwb = 0; --宠物币现金
formhash = nil;
SleepCount=0; --睡眠剩余次数
t_lastkill=os.time();
skill="mlightbomb";
--------------------------------- web 窗体事件处理函数区 -----------------------------------------
web.loadProc = function(url,wb) --当一个网址重定向完成以后(无论成功或失败),自动调用它
if (bReady and wb==wbTarget) then --仅对目标web对象启用,可在任何时候令bReady=false暂停回调函数功能的执行
strHtml = wbTarget:getHtml(); --原始html
local strTitle = tostring(strHtml:match("<title>(.-)</title>")); --网页的title
local fh = strHtml:match(".name=.formhash..value=.(.-).>");
if(fh) then
formhash=fh;
end;
local HP_GuaiWu=strHtml:match("怪 物 HP:<font color=green>(.-)</font>");
if (HP_GuaiWu) then
HP_GuaiWu=tonumber(HP_GuaiWu);
end;
if(strHtml:match([[<span id="petmp">%d+ </span> / %d+ </font>]])) then
myMP,myMP_MAX=strHtml:match([[<span id="petmp">(%d+) </span> / (%d+) </font>]]);
myMP,myMP_MAX=tonumber(myMP),tonumber(myMP_MAX)
end;
local sc=strHtml:match("被催眠剩余 (.-) 回合")
if (sc) then
SleepCount=tonumber(sc);
else
sc=strHtml:match("alt=催眠术></span><br><b><font color=red>(%d+)</font>")
if (sc) then
SleepCount=tonumber(sc);
end;
end;
if(strHtml:match("会员登录")) then
do_login();
elseif(strHtml:match("欢迎您回来")) then
wbTarget:go("http://bbs.chinapyg.com/pet.php?index=bank");
elseif(strHtml:match("快存") or strHtml:match("系统判定")) then
delay(5000);
buy_hbs();
wbTarget:go(mapurl);
elseif(strHtml:match("您的宠物已经死亡,还能打怪吗")) then
wbTarget:go("http://bbs.chinapyg.com/pet.php?index=itemuse&storageid=45312"); --------使用复活宝石
elseif(strHtml:match("提交答案") and strHtml:match([[1.2=]])) then
do_answer(3);
elseif (strHtml:match("提交答案") and strHtml:match([[5.5=]])) then
do_answer(1);
elseif (strHtml:match("提交答案") and strHtml:match([[少数民族]])) then
do_answer(2);
elseif (strHtml:match("警察") or strHtml:match("卧底") or strHtml:match("巡检") or strHtml:match("大J") or strHtml:match("Zufay") or strHtml:match("回答正确") or strHtml:match("超过60秒") or strHtml:match("这只怪兽已经死了") or strHtml:match("您存了.-块宠物币!") or strHtml:match("请输入正确的数量!")) then
do_change_guai();
elseif(strHtml:match("怪物死了另寻怪物")) then
if( not strHtml:match("红宝石")) then
buy_hbs();
wbTarget:go(mapurl);
end;
cwb=strHtml:match("宠物币:.-(%d+)")
if(cwb) then
bReady = false;
cwb=tonumber(cwb)
if(cwb>50000 and formhash) then
local savemoney="http://bbs.chinapyg.com/pet.php?index=bank&action=deposit&formhash="..formhash.."&nums="..cwb-11000;
wbTarget:go(savemoney); --------存钱
wb:wait("");
end;
bReady = true;
end;
do_change_guai();
elseif (strHtml:match("魔法不足")) then
do_addMP();
elseif (HP_GuaiWu) then
if(strHtml:match("攻击过快")) then
t_lastkill=os.time()-999;
end;
if((not strHtml:match("剩余时间")) and strHtml:match("三倍经验卡")) then
wbTarget:doScript("dorequest('expcard3')","javascript");
delay(3000);
end;
do_fight();
else --存在没有捕获的意外页面
delay(3000);
wbTarget:go(mapurl);
end;
end;
end;
--------------------------------------- 自定义函数区 ---------------------------------------------
--[[login--]]
function do_login()
local ele = wbTarget:getEle("username");
ele:setAttribute("value","abc");
local ele = wbTarget:getEle("password");
ele:setAttribute("value","12345678");
local ele = wbTarget:getEle("loginsubmit");
ele:click();
end;
--[[换怪物--]]
function do_change_guai()
wbTarget:go(mapurl);
end;
--[[杀怪--]]
function do_fight()
if(SleepCount==0) then
do_sleep();
end;
while(os.time()-t_lastkill<2) do
delay(50);
end;
if(myMP>10000) then
skill="mlightbomb";
elseif(myMP<1800) then
skill="mlight";
end;
wbTarget:doScript("doskill('"..skill.."');","javascript");
t_lastkill=os.time();
end;
--[[补充MP--]]
function do_addMP()
for i=1,5 do
wbTarget:doScript("dorequest('bmpitem');","javascript");
delay(1000);
end;
do_fight();
end;
--[[补充背包中的红宝石--]]
function buy_hbs()
bReady = false;
if(formhash) then
local buyHBS="http://bbs.chinapyg.com/pet.php?index=itemshop&action=buyitem&itemid=40&formhash="..formhash.."&nums="..200;
wbTarget:go(buyHBS);
wbTarget:wait("");
delay(5000);
local baginHBS="http://bbs.chinapyg.com/pet.php?index=storage&action=bagin&storageid=45242&numsname=nums50&formhash="..formhash.."&nums="..200;
wbTarget:go(baginHBS);
wbTarget:wait("");
end;
bReady = true;
end;
--[[使用睡眠--]]
function do_sleep()
local isOK=false
while((not isOK) and nStop()) do
wbTarget:doScript("dorequest('callmcuimian');","javascript");
delay(2000);
local ele = wbTarget:getEle("msg");
if(ele) then
local str = ele:getText();
if(str:match("怪物睡着了") or str:match("魔法效果尚未结束")) then
isOK=true;
local sc=strHtml:match("alt=催眠术></span><br><b><font color=red>(%d+)</font>")
if (sc) then
SleepCount=tonumber(sc);
end;
if(SleepCount==0) then
SleepCount=1;
end;
elseif(str:match("MP不足")) then
wbTarget:doScript("dorequest('bmpitem');","javascript");
elseif(str:match("没有红宝石了")) then
isOK=true
wbTarget:go("http://bbs.chinapyg.com/pet.php?index=bank");
end;
end;
end;
end;
--[[答题--]]
function do_answer(n)
--delay(500);
local eles = { wbTarget:getEle("subjectkey"); }
eles
:setAttribute("checked","true");
--提交答案
local submit; --提交按钮ele
local subeles = { wbTarget:eleAll() };
for i=1,#subeles do
local value = subeles
:getAttribute("value");
if (value and value:match("提交答案")) then
submit = subeles
;
break;
end;
end;
if (submit) then --若找到提交按钮,则按之
submit:click();
end;
end;
--[[结束应用程序--]]
function do_exit()
wbTarget = nil;
stop();
win.exit(0);
do return false end;
end;
---------------------------------------- 应用程序入口 --------------------------------------------
bReady = false; --禁止执行wbTarget对象的回调函数web.loadProc内的具体功能(因为可能需要在开始自动化操作前做一些准备)
--[[
......这里是您的其他一些初始化语句,注意应放在wbTarget对象初始化之前,防止回调函数web.loadProc内的具体功能过早运作
--]]
wbTarget = web.new(); --创建对象时建议不要使用url参数
wbTarget:setDL(_DLCTL_RESYNCHRONIZE);
wbTarget:setSilent(true,true,true,true);
wbTarget:setTitle(true);
wbTarget:setScroll(false);
wbTarget:show(true);
hwnd = wbTarget:getWindow();
--win.setRect(hwnd,800,600,10,10)
bReady = true; --启用执行wbTarget对象的回调函数web.loadProc内的具体功能
wbTarget:go("http://bbs.chinapyg.com/pet.php?index=bank"); --开始显示你的目标URL指定的页面,同时由web.loadProc中的代码开始自动操作
wbTarget:wait(-1);
do_exit(); --退出应用程序
]]>
</脚本区块>
<数据区块 />
</ApeML>
》》》遨游网际 我心飞翔《《《
▲▲▲山外青山天外天 白云深处有神仙 神仙本是凡人做 只怕凡人志不坚▲▲▲