经过前两篇文章,我们已经可以得到了我们的花园的基本信息了,并用xml反序列化来映射到相应的实体类中,有了花园信息,我就就要来研究其一些动作的实现了,比如说:浇水、除草、收获、偷盗等等功能具体是怎么来实现的, 首先还是打开fiddler2抓一下包看看

收获:

GET /!house/!garden/havest.php?
verify=22842320%5F1062%5F22842320%5F1245934796%5Fb2a24c5dfb54cbeb1498d95d42b820a4&seedid=0&farmnum=13&fuid=0&r=0%2E24021180626004934 HTTP/1.1
成功

<data><leftnum>2</leftnum><stealnum>0</stealnum>
<num>2</num><seedname>雪莲</seedname>
<fruitpic>http://img.kaixin001.com.cn//i2/house/garden/crop/xuelian.swf
</fruitpic><ret>succ</ret></data>
失败

<data><ret>fail</ret><reason>这块地没有东西可收获</reason></data>

偷盗:

GET /!house/!garden/havest.php?
verify=22842320%5F1062%5F22842320%5F1245934796%5Fb2a24c5dfb54cbeb1498d95d42b820a4
&seedid=0
&farmnum=14
&fuid=7033784
&r=0%2E7748989406973124 HTTP/1.1
成功

<data><anti>0</anti><leftnum>46</leftnum><stealnum>1</stealnum>
<num>1</num><seedname>牧草</seedname>
<fruitpic>http://img.kaixin001.com.cn//i2/house/garden/crop3/gouweiba.swf
</fruitpic><ret>succ</ret></data>
失败

<data><anti>0</anti><ret>fail</ret><reason>已偷过,做人要厚道</reason></data>

犁地:

GET /!house/!garden/plough.php?
verify=22842320%5F1062%5F22842320%5F1245934796%5Fb2a24c5dfb54cbeb1498d95d42b820a4
&seedid=0
&farmnum=13
&fuid=0
&r=0%2E09461198281496763 HTTP/1.1

成功
<data><ret>succ</ret></data>

失败
<data><ret>fail</ret><reason>已经犁过了,该播种了</reason></data>

播种:

GET /!house/!garden/farmseed.php?
verify=22842320%5F1062%5F22842320%5F1245934796%5Fb2a24c5dfb54cbeb1498d95d42b820a4
&seedid=63
&farmnum=13
&fuid=0
&r=0%2E42840757546946406 HTTP/1.1

成功
<data><ret>succ</ret></data>

失败
<data><ret>fail</ret><reason>这里不可以种喔</reason></data>

上面是几种基本状态请求的URL和返回操作成功还是失败的XML,我们可以按照上一扁的方法把返回的XML进行反序列化来让我们的程序得到这些状态。

我们先分析每个请求都向服务器发送了什么信息,其中的参数大部发好理解,我们就不说了,就一个verify和一个r不太清楚做什么用,我尝试着在浏览器里把这两个参数去掉然后访问,结果是,r有没有都无所谓,哪我们就不考虑它了,还有一个缺不可缺少,而且每次登录这个verify都会变化,我们哪里去取到这个值呢, 在分析了多个页面的原代码后,我们在http://www.kaixin001.com/!house/index.php页面的代码中找到了这串值,

先也别管他起什么作用了,把它抓出来才是正经。怎么抓出来,这个返回的可不是XML是一个乱七八糟的HTML,而且这串值还在一段js代码中,好在我们还有正则表达式这个武器,一切都迎刃而解了,在VS中敲出如下代码:

由于这个值在每一次登录以后不会改变,所以我的做好是在登录后就调用这个函数,并保存在一个类的公有变量中。

获得了这个verify的值后,我们就可以放心的写接下来的代码了,接下了就简单了,按上一篇的方法,写就可以了,先设计实体代码

[XmlRoot(ElementName = "data")]
   public class ReturnInfo
   {
       public string ret;
       public string reason;
       public int anti;
   }

大部分时候返回的XML就包含这些值,只有收获成功的时候才返回更多的信息,我们可以把这种情况做为Returninfo的一个子类来实现

Code

我们的操作代码也很简单

Code

这个函数基本上符合了我们的要求,但是和我们昨天的代码对比一下,我们发现除了返回的类型不同,其它大部分的代码都重复了

这些重复的代码,我们每一个操作都要写,太麻烦了,万一要修改哪不完玩了,重构一下,一开始我的办法是把这几行代码写到一个单独的函数中,但是我们很快发现,下面两句代码也只是稍有不同

就这一点点的差别用普通函数来重构就麻烦了,但是好在C#2.0以后有了泛型这个好东东,看我七十二变

Code

接下来我们的代码就变成了这样了

Code

是不是清爽了好多!

    本文转自无心之柳.NET博客园博客,原文链接:http://www.cnblogs.com/9527/archive/2009/08/23/1552561.html,如需转载请自行联系原作者

开心网外挂开发之 三相关推荐

  1. 开心网外挂开发之 XML序列化于反序列化

    通过昨天的文章我们已经了解了开发一个开心网的外挂所需要的最基本的东本,接下来的工作可以说基本上就上围绕这个基础来进行的,我写这一系列文章主要的目地不仅仅是为了让大家了解怎么开发开心网外挂,最主要的目过 ...

  2. 揭秘游戏外挂开发技术(一)之美

    学习逆向分析和外挂编程也有一段时间了,我总结了外挂开发的基本思路和一些初级的方法和技巧.首先说说基本思路吧.我觉得外挂开发主要分为两部分: 一是对游戏的分析调试,主要是找基址和call地址等游戏信息. ...

  3. 揭秘游戏外挂开发技术(一)

    学习逆向分析和外挂编程也有一段时间了,我总结了外挂开发的基本思路和一些初级的方法和技巧.首先说说基本思路吧.我觉得外挂开发主要分为两部分: 一是对游戏的分析调试,主要是找基址和call地址等游戏信息. ...

  4. **挖金子小游戏外挂开发教程**

    挖金子小游戏外挂开发教程 第一步:进入游戏窗口 第二步:打开Spy4win V2.0 分析得到数据如图: 第三步:打开CE

  5. 【游戏逆向】游戏外挂开发技术《挖金子》

    首先说说基本思路吧.外挂开发主要分为两部分: 一是对游戏的分析调试,主要是找基址和call地址等游戏信息. 二是使用编程工具进行外挂功能开发,比如用delphi或者VB.VC等自己熟悉的一种开发工具进 ...

  6. PCL-1.8.1从源码搭建开发环境三(QHULL库的编译)

    原文首发于微信公众号「3D视觉工坊」:PCL-1.8.1从源码搭建开发环境三(QHULL库的编译) 首先,介绍一下QHull库. QHull是一个开源的程序软件,用来研究解决凸包问题,生成凸包形体.官 ...

  7. 云计算Python自动化运维开发实战 三、python文件类型

    为什么80%的码农都做不了架构师?>>>    云计算Python自动化运维开发实战 三.python文件类型 导语: python常用的有3种文件类型 1. 源代码     py ...

  8. ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇

    第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不 通.如果大家开发的是WinForm中的事件,之前的定义可能没有什 ...

  9. Nutch开发(三)

    Nutch开发(三) 文章目录 Nutch开发(三) 开发环境 1.Nutch url过滤 2.示例 3.在Solr建立index 关于solr字段的配置 4.关于Nutch plugin 5.关于N ...

  10. 【蓝鸥Unity开发基础三】课时14 刚体

    [蓝鸥Unity开发基础三]课时14 刚体 一.刚体 物理引擎: 物理引擎能够真实的模拟物理效果 Unity中使用的是NVIDIA的PhysX物理引擎 在Unity中使用Rigidbody让游戏对象受 ...

最新文章

  1. 全国所有省市县地理坐标Json格式
  2. 冒泡和快速排序的时间复杂度_排序算法整合(冒泡,快速,希尔,拓扑,归并)
  3. Spring Cloud Stream如何消费自己生产的消息?
  4. 图像的线性变换的原理及OpenCV代码实现~
  5. 在Silverlight+WCF中应用以角色为基础的安全模式(一)基础篇之角色为基础的安全模式简介...
  6. MFC模块状态(一)
  7. java操作mongodb(连接池)(转)
  8. path环境变量丢失恢复
  9. VMware为全球数字化基础架构提供原生安全
  10. 创业一定要做自己“喜欢”并且有“优势”的事情
  11. 09. ajax跨域问题,同源策略
  12. Adapter(适配)
  13. 南方cass快捷键命令修改在哪_南方CASS快捷命令
  14. vbm 分析_vbm8_r435 脑功能数据分析处理实用软件,基于SPM 来运行 matlab 238万源代码下载- www.pudn.com...
  15. Hadoop系列五之版本差别
  16. vue使用百度OCR拍照识别图片信息
  17. matlab报错Unbalanced or unexpected parenthesis or bracket.
  18. Linux: sd 0:0:1:0: timing out command, waited 1080s, 访问磁盘错误
  19. 量子BB84,B92协议简单介绍
  20. 285. 没有上司的舞会

热门文章

  1. 没有卑微的工作,只有卑微的工作态度
  2. 功能测试数据测试之因果图分析方法
  3. Matlab---示波器Scope-Measurements
  4. 鸡尾酒会公式\帕金森定律(Parkinson's Law)
  5. sql性能优化:sql Server 怎么添加全文索引+语法深度剖析+测试
  6. 【转载】通过搜狗站长平台查看网站的搜狗流量及搜索关键字
  7. CSDN表格换行方法
  8. Reno与RACK对丢失/重传报文的标记
  9. Cybertec PostgreSQL透明加密解析
  10. linux下搭建L2TP+IPSec服务端,组建异地虚拟局域网