下载最新版
古惑仔挂机外挂
引言
前些日子,看见宿舍有同学在玩校内网的web游戏——古惑仔之横行天下。发现其操作比较简单,无非就是点击不同页面的不同按钮来做任务、攻击、存/取钱。由于其升级主要靠做任务,遂写了一个不是外挂的外挂——帮助玩家自动做任务。我之所以说它不是外挂,是由于到目前为止我还未见过如此简单的外挂。同时我在给它取名时,谓之“FightIng”。以下将把古惑仔之横行天下简称为“古惑仔”。
FightIng工作原理
1.正如我上面提到的,古惑仔游戏升级主要靠做任务,此外挂的目标就是帮助玩家做任务。而帮助玩家做任务的具体方法和步骤就是模拟点击(click)web页面中相应任务的按钮(input,type="sumit")。System.Windows.Forms.WebBrowser控件的InvokeMember方法能够帮助我们模拟点击该按钮。
2.由于页面中任务众多,但我们需要程序点击特定任务的按钮。如何到达到这一目标呢?.WebBrowser的Document为我们提供一个html文档树,它可以让我们轻而易举的获取某一任务的按钮并模拟点击(click)。
3.具体如何获取特定任务的按钮。经分析任务页面(job.do)的源码,发现所有任务的源码都被放在一个独立的<form>元素内。如下:
办假证
<form name="" action="./djob.do" method="post">
<input name="id" value="1" type="hidden">
<input class="sub_btn" name="" value="立刻行动" type="submit">
</form>
注意上面的棕色字体部分。无论什么任务,唯一区别就在value的值不同,此处的value=“1”表示的任务为“办假证”。下面列出了1~20级的任务列表,前面的数字表示value的值。
- 1:办假证
- 2:夜总会看场子
- 3:替人追债
- 4:抢地盘
- 5:放高利贷
- 6:砸赌场
- 7:走私洋酒
- 8:酿酒
- 9:抢地下钱庄
我们就可以通过WebBrowser.Document.GetElementsByTagName("form")来获取任务页面(job.do)所有的form元素。(此处要注意,由于页面中存在不是任务的form,如搜索框。为了比避免出错,我们可以把循环form获取按钮的代码放在try……catch中,也可以先获取任务列表的父元素<table id="job_list" class="item_table" cellspacing="3" cellpadding="0">,再用父元素的GetElementsByTagName("form")来获取所有任务。 )同时获取form元素的第一(<input name="id" value="N" type="hidden"> )、第二个子元素(<input class="sub_btn" name="" value="立刻行动" type="submit"> )。通过第一个元素的value判断当前任务的名称,通过InvokeMember第二个元素,来达到模拟点击(click)特定任务的按钮。
复制代码
try
{
HtmlDocument htmlDoc = _wb.Document;
HtmlElementCollection formCollHtmlEle = htmlDoc.GetElementsByTagName("form");
for (int i = 1; i < formCollHtmlEle.Count; i++)
{
if (formCollHtmlEle[i].Children[0].GetAttribute("value") == id.ToString())
{
formCollHtmlEle[i].Children[1].InvokeMember("click");
_wb.Refresh();
break;
}
}
}
catch { }
4.注意个别任务,如“走私洋酒”。走私洋酒需要酿酒,本来可以通过执行任务返回的信息里获取是否需要酿酒,可事实发现InvokeMember激活的click事件没有返回“……酒水不足……”。无奈,只好通过获取当前精力来判断是否该酿酒了。由于走私洋酒的精力要求点数为18点,如果程序发现当前的精力点数大于19(避免误差)了,则说明没有正常执行走私洋酒,可能原因是酒水不足,遂酿酒一次。
复制代码
if (id == 7)//如果任务有其他准备条件,在此添加
{//如果是走私洋酒,则检查酒水是否满足。判断条件:精力大于19(避免误差),则说明酒水不足,此次执行酿酒
if (GetCurrentSprit() > 19) { ExecuteByID(8); return; }
}
5.接下来就是需要排除Bug了。如,在WebBrowser下载文档和加载文档时获取Document是错误的,获取Document不存在的子元素是错误的。
说的不够清楚,还请谅解。如有问题,可留言、Email。源码下载。