文文瑞瑞
文文瑞瑞
关注数: 0
粉丝数: 10
发帖数: 48
关注贴吧数: 2
游戏外挂制作(转) 在几年前我看到别人玩网络游戏用上了外挂,做为程序员的我心里实在是不爽,想搞清楚这到底是怎么回事。就拿了一些来研究,小有心得,拿出来与大家共享,外挂无非就是分几种罢了(依制作难度):1、动作式,所谓动作式,就是指用API发命令给窗口或API控制鼠标、键盘等,使游戏里的人物进行流动或者攻击,最早以前的“石器”外挂就是这种方式。(这种外挂完全是垃圾,TMD,只要会一点点API的人都知道该怎么做,不过这种外挂也是入门级的好东东,虽然不能提高你的战斗力,但是可以提高你的士气^_^)2、本地修改式,这种外挂跟传统上的一些游戏修改器没有两样,做这种外挂在编程只需要对内存地址有一点认识并且掌握API就可以实现,“精灵”的外挂这是这种方式写成的,它的难点在于找到那些地址码,找地址一般地要借助于别人的工具,有的游戏还有双码校验,正正找起来会比较困难。(这种外挂,比上一种有一点点难度,但是这种外挂做起来能够用,也是有一定难度的啦~~,这种外挂可以很快提升你对内存地址的理解及应用,是你编程技术提高的好东东)3、木马式,这种外挂的目的是帮外挂制作者偷到用户的密码(TMD,“烂”就一个字,不过要知已知彼所以还是要谈一下啦~~),做这种外挂有一定的难度,需要HOOK或键盘监视技术做底子,才可以完成,它的原理是先首截了用户的帐号或密码,然后发到指定邮箱。(我以前写过这样的东东,但是从来没有用过,我知道这种东东很不道德,所以以后千万别用呀!~~)4、加速式,这种外挂可以加快游戏的速度……(对不起大家,这种东东我没有实际做过,所以不能妄自评,惭愧~~)5、封包式,这种外挂是高难度外挂,需要有很强的编程功力才可以写得出来。它的原理是先截取封包,后修改,再转发(Kao,说起来简单,你做一个试试~~~~)。这种外挂适用于大多数网络游戏,像WPE及一些网络游戏外挂都是用这种方式写成的,编写这种外挂需要apihook技术,winsock技术 这几种外挂之中,前三种可以用VB,DELPHI等语言比较好实现,后两种则要用VC等底层支持比较好的编程工具才好实现。现在就依次(制作难度)由浅到深谈谈我对外挂制作的一些认识吧~~~~首先,先来谈一下动作式的外挂,这也是我第一次写外挂时做的最简单的一种。记得还在“石器”时代的时候,我看到别人挂着一种软件(外挂)人物就可以四外游走(当时我还不知道外挂怎么回事^_^),于是找了这种软件过来研究(拿来后才听别人说这叫外挂),发现这种东东其实实现起来并不难,仔佃看其实人物的行走无非就是鼠标在不同的地方点来点去而已,看后就有实现这功能的冲动,随后跑到MSDN上看了一些资料,发现这种实现这几个功能,只需要几个简单的API函数就可以搞定:1、首先我们要知道现在鼠标的位置(为了好还原现在鼠标的位置)所以我们就要用到API函数GetCursorPos,它的使用方法如下:BOOL GetCursorPos( LPPOINT lpPoint // address of structure for cursor position );2、我们把鼠标的位置移到要到人物走到的地方,我们就要用到SetCursorPos函数来移动鼠标位置,它的使用方法如下:BOOL SetCursorPos(int X, // horizontal position int Y // vertical position);3、模拟鼠标发出按下和放开的动作,我们要用到mouse_event函数来实现,具休使用方法用下:VOID mouse_event(DWORD dwFlags, // flags specifying various motion/click variantsDWORD dx, // horizontal mouse position or position changeDWORD dy, // vertical mouse position or position changeDWORD dwData, // amount of wheel movementDWORD dwExtraInfo // 32 bits of application-defined information);在它的dwFlags处,可用的事件很多如移动MOUSEEVENTF_MOVE,左键按下MOUSEEVENTF_LEFTDOWN,左键放开MOUSEEVENTF_LEFTUP,具体的东东还是查一下MSDN吧~~~~~
外挂制作(五) 这里仅对网络连接(FD_CONNECT) 和读取数据(FD_READ) 进行了简单模拟操作,但实际中网络线程接收到事件消息后,会对数据进行组织整理,然后再将数据回传给我们的游戏主线程使用,游戏主线程再将处理过的数据发送出去,这样一个往返就构成了我们网络游戏中的数据通讯,是让网络游戏动起来的最基本要素。 最后,我们来谈谈关于网络数据包(数据封包)的组织,网络游戏的数据包是游戏数据通讯的最基本单位,网络游戏一般不会用字节流的方式来进行数据传输,一个数据封包也可以看作是一条消息指令,在游戏进行中,服务器和客户端会不停的发送和接收这些消息包,然后将消息包解析转换为真正所要表达的指令意义并执行。互动与管理 说到互动,对于玩家来说是与其他玩家的交流,但对于计算机而言,实现互动也就是实现数据消息的相互传递。前面我们已经了解过网络通讯的基本概念,它构成了互动的最基本条件,接下来我们需要在这个网络层面上进行数据的通讯。遗憾的是,计算机并不懂得如何表达玩家之间的交流,因此我们需要提供一套可让计算机了解的指令组织和解析机制,也就是对我们上面简单提到的网络数据包(数据封包)的处理机制。为了能够更简单的给大家阐述网络数据包的组织形式,我们以一个聊天处理模块来进行讨论,看看下面的代码结构: struct tagMessage{ long lType; long lPlayerID; }; // 消息指令// 指令相关的玩家标识 char strTalk[256]; // 消息内容 上面是抽象出来的一个极为简单的消息包结构,我们先来谈谈其各个数据域的用途: 首先,lType 是消息指令的类型,这是最为基本的消息标识,这个标识用来告诉服务器或客户端这条指令的具体用途,以便于服务器或客户端做出相应处理。lPlayerID 被作为玩家的标识。大家知道,一个玩家在机器内部实际上也就是一堆数据,特别是在游戏服务器中,可能有成千上万个玩家,这时候我们需要一个标记来区分玩家,这样就可以迅速找到特定玩家,并将通讯数据应用于其上。 strTalk 是我们要传递的聊天数据,这部分才是真正的数据实体,前面的参数只是数据实体应用范围的限定。 在组织完数据之后,紧接着就是把这个结构体数据通过Socket 连接发送出去和接收进来。这里我们要了解,网络在进行数据传输过程中,它并不关心数据采用的数据结构,这就需要我们把数据结构转换为二进制数据码进行发送,在接收方,我们再将这些二进制数据码转换回程序使用的相应数据结构。让我们来看看如何实现: tagMessageMsg; Msg.lTypeMSG_CHAT; Msg.lPlayerID 1000; strcpy( &Msg.strTalk, "聊天信息" ); 首先,我们假设已经组织好一个数据包,这里MSG_CHAT 是我们自行定义的标识符,当然,这个标识符在服务器和客户端要统一。玩家的ID 则根据游戏需要来进行设置,这里1000 只作为假设,现在继续: char* p = (char*)&Msg;long lLength = sizeof( tagMessage ); send( sSocket, p, lLength );// 获取数据结构的长度 我们通过强行转换把结构体转变为char 类型的数据指针,这样就可以通过这个指针来进行流式数据处理,这里通过sizeof() 获得结构体长度,然后用WinSock 的Send() 函数将数据发送出去。 接下来看看如何接收数据: long lLength = sizeof( tagMessage );char* Buffer = new char[lLength];recv( sSocket, Buffer, lLength );tagMessage* p = (tagMessage*)Buffer;// 获取数据 在通过WinSock 的recv() 函数获取网络数据之后,我们同样通过强行转换把获取出来的缓冲数据转换为相应结构体,这样就可以方便地对数据进行访问。(注:强行转换仅仅作为数据转换的一种手段,实际应用中有更多可选方式,这里只为简洁地说明逻辑)谈到此处,不得不提到服务器/ 客户端如何去筛选处理各种消息以及如何对通讯数据包进行管理。无论是服务器还是客户端,在收到网络消息的时候,通过上面的数据解析之后,还必须对消息类型进行一次筛选和派分,简单来说就是类似Windows 的消息循环,不同消息进行不同处理。这可以通过一个switch 语句(熟悉Windows 消息循环的朋友相信已经明白此意),基于消息封包里的lType 信息,对消息进行区分处理,考虑如下代码片段: switch( p->lType ) // 这里的p->lType为我们解析出来的消息类型标识{ case MSG_CHAT: // 聊天消息 break; case MSG_MOVE: // 玩家移动消息 break; case MSG_EXIT: // 玩家离开消息 break; default: break;} 上面片段中的MSG_MOVE 和MSG_EXIT 都是我们虚拟的消息标识(一个真实游戏中的标识可能会有上百个,这就需要考虑优化和优先消息处理问题)。此外,一个网络游戏服务器面对的是成百上千的连接用户,我们还需要一些合理的数据组织管理方式来进行相关处理。普通的单体游戏服务器,可能会因为当机或者用户过多而导致整个游戏网络瘫痪,而这也就引入分组服务器机制,我们把服务器分开进行数据的分布式处理。 我们把每个模块提取出来,做成专用的服务器系统,然后建立一个连接所有服务器的数据中心来进行数据交互,这里每个模块均与数据中心创建了连接,保证了每个模块的相关性,同时玩家转变为与当前提供服务的服务器进行连接通讯,这样就可以缓解单独一台服务器所承受的负担,把压力分散到多台服务器上,同时保证了数据的统一,而且就算某台服务器因为异常而当机也不会影响其他模块的游戏玩家,从而提高了整体稳定性。 分组式服务器缓解了服务器的压力,但也带来了服务器调度问题,分组式服务器需要对服务器跳转进行处理,就以一个玩家进行游戏场景跳转作为讨论基础:假设有一玩家处于游戏场景A,他想从场景A 跳转到场景B,在游戏中,我们称之场景切换,这时玩家就会触发跳转需求,比如走到了场景中的切换点,这样服务器就把玩家数据从"游戏场景A 服务器"删除,同时在"游戏场景B 服务器"中把玩家建立起来。 这里描述了场景切换的简单模型,当中处理还有很多步骤,不过通过这样的思考相信大家可以派生出很多应用技巧。不过需要注意的是,在场景切换或者说模块间切换的时候,需要切实考虑好数据的传输安全以及逻辑合理性,否则切换很可能会成为将来玩家复制物品的桥梁。
外挂制作(三) 我们来说明一下上面单机游戏的流程。首先,不管是游戏软件还是其他应用软件,初始化部分必不可少,这里需要对游戏的数据进行初始化,包括图像、声音以及一些必备的数据。接下来,我们的游戏对场景、人物以及其他元素进行循环绘制,把游戏世界展现给玩家,同时接收玩家的输入操作,并根据操作来做出响应,此外,游戏还需要对NPC以及一些逻辑AI进行处理。最后,游戏数据被释放,游戏结束。 网络游戏与单机游戏有一个很显著的差别,就是网络游戏除了一个供操作游戏的用户界面平台(如单机游戏)外,还需要一个用于连接所有用户,并为所有用户提供数据服务的服务器,从某些角度来看,游戏服务器就像一个大型的数据库,提供数据以及数据逻辑交互的功能。让我们来看看一个简单的网络游戏模型执行流程: 客户机:Login()// 登入模块{ 初始化游戏数据; 获取用户输入的用户和密码; 与服务器创建网络连接; 发送至服务器进行用户验证; ... 等待服务器确认消息; ... 获得服务器反馈的登入消息; if( 成立 ) 进入游戏; else 提示用户登入错误并重新接受用户登入;}Game()// 游戏循环部分{ 绘制游戏场景、人物以及其它元素; 获取用户操作输入; 将用户的操作发送至服务器; ... 等待服务器的消息; ... 接收服务器的反馈信息; switch( 服务器反馈的消息数据 ) { case 本地玩家移动的消息: { if( 允许本地玩家移动 ) 客户机处理人物移动; else 客户机保持原有状态; } break; case 其他玩家/NPC的移动消息: { 根据服务器的反馈信息进行其他玩家或者NPC的移动处理; } break; case 新玩家加入游戏: { 在客户机中添加显示此玩家; } break; case 玩家离开游戏: { 在客户机中销毁此玩家数据; } break; ... 其它消息类型处理; ... default: break; }}Exit()// 游戏结束{ 发送离开消息给服务器; ... 等待服务器确认; ... 得到服务器确认消息; 与服务器断开连接; 释放游戏数据; 离开游戏;} 服务器: Listen() // 游戏服务器等待玩家连接模块{ ... 等待用户的登入信息; ... 接收到用户登入信息; 分析用户名和密码是否符合; if( 符合 ) { 发送确认允许进入游戏消息给客户机; 把此玩家进入游戏的消息发布给场景中所有玩家; 把此玩家添加到服务器场景中; } else { 断开与客户机的连接; }}Game() // 游戏服务器循环部分{ ... 等待场景中玩家的操作输入; ... 接收到某玩家的移动输入或NPC的移动逻辑输入; // 此处只以移动为例 进行此玩家/NPC在地图场景是否可移动的逻辑判断; if( 可移动 ) { 对此玩家/NPC进行服务器移动处理; 发送移动消息给客户机; 发送此玩家的移动消息给场景上所有玩家; } else 发送不可移动消息给客户机; }Exit() // 游戏服务=器结束{ 接收到玩家离开消息; 将此消息发送给场景中所有玩家; 发送允许离开的信息; 将玩家数据存入数据库; 注销此玩家在服务器内存中的数据;}} 让我们来说明一下上面简单网络游戏模型的运行机制。先来讲讲服务器端,这里服务器端分为三个部分(实际上一个完整的网络游戏远不止这些):登入模块、游戏模块和登出模块。登入模块用于监听网络游戏客户端发送过来的网络连接消息,并且验证其合法性,然后在服务器中创建这个玩家并且把玩家带领到游戏模块中; 游戏模块则提供给玩家用户实际的应用服务,我们在后面会详细介绍这个部分; 在得到玩家要离开游戏的消息后,登出模块则会把玩家从服务器中删除,并且把玩家的属性数据保存到服务器数据库中,如: 经验值、等级、生命值等。 接下来让我们看看网络游戏的客户端。这时候,客户端不再像单机游戏一样,初始化数据后直接进入游戏,而是在与服务器创建连接,并且获得许可的前提下才进入游戏。除此之外,网络游戏的客户端游戏进程需要不断与服务器进行通讯,通过与服务器交换数据来确定当前游戏的状态,例如其他玩家的位置变化、物品掉落情况。同样,在离开游戏时,客户端会向服务器告知此玩家用户离开,以便于服务器做出相应处理。以上用简单的伪代码给大家阐述了单机游戏与网络游戏的执行流程,大家应该可以清楚看出两者的差别,以及两者间相互的关系。我们可以换个角度考虑,网络游戏就是把单机游戏的逻辑运算部分搬移到游戏服务器中进行处理,然后把处理结果(包括其他玩家数据)通过游戏服务器返回给连接的玩家。网络互连 在了解了网络游戏基本形态之后,让我们进入真正的实际应用部分。首先,作为网络游戏,除了常规的单机游戏所必需的东西之外,我们还需要增加一个网络通讯模块,当然,这也是网络游戏较为主要的部分,我们来讨论一下如何实现网络的通讯模块。
08国家线 调剂查询汇总 http://www.exam8.com/xueli/kaoyan/http://learning.sohu.com/s2008/kyfs/http://zhidao.baidu.com/question/48040806.htmlhttp://www.08piao.com/newszp.asp?id=591
城管可说了一句经典的 今天去山东省济宁市太白路上一家银行办事,出来看到路边许多人,原来是城管在清街,刚好清到一个算命的老太太,老太太争辩说俺是要饭的,这时一个中年城管说了一句话,令我明白原来中国的城管还是有脑子的,他说:还给人算命,我们来都不知道!?
欢迎大家提问,欢迎大家发表新贴 欢迎大家提问,欢迎大家发表新贴本贴吧正在成长中希望大家和我一起努力把她建好
关注姚明关注休斯敦火箭 新浪体育讯 姚明腿伤多长时间才能痊愈?至今众说纷纭。有人说六个礼拜就能重回赛场,有人说他六个礼拜才能下地走路。这么前后一差可就最少两个礼拜了。 据姚明自己的小道消息透露,六个礼拜可能就能重回赛场了。姚明现在在家休息打游戏,吃吃喝喝挺高兴,放话出来中国新年可以出场比赛。无论如何,至少全明星得票的第一名,总不至于连二月中旬的全明星都赶不上参加吧。 孟菲斯灰熊队的主教练刚刚因为成绩不好而被炒鱿鱼,一大部份还因为主力加索尔无法上场而造成成绩整体下滑。失去姚明麦蒂又背后不好的范甘迪,听到这个消息不知道有没有由于联想到自己,而吓出一身冷汗呢? 看上去好象没有。经过一个礼拜,范甘迪的感冒也好了,精神也佳了,眼睛也炯炯有神了,说话嗓门儿也大了,看不出有什么精神压力。他说他认识灰熊的原教练,听到噩耗当然要致电略表同情之情。 他说:“这真是被受伤牵连出来的惨案啊!”说着顿一顿,不知是不是在想惨案会不会落到自己的头上。“不过这样的事情在各种体育联盟里都常有发生啊,也不是什么特别奇怪的事。作为个人来讲,我是很能理解他的处境的,但是如果按照成绩客观的来讲,应该没有什么讨论的余地。” 范甘迪就是这样,讲话可东可西,模棱两可,随便你怎么解释也挑不出错来。他认为,灰熊的教练并不是一个不称职的教练,只是无论你再怎么牛,教练归根结底还是要靠队员才能体现自身的价值。“有时队员就像是上帝一样要保佑教练的。” 现在姚明腿坏了,没法儿保佑范甘迪,范甘迪要顶礼膜拜的就剩麦蒂了。可能他看麦蒂的时候,就像是一个金饭碗放在他的面前差不多。可是麦蒂自己也正在犯病,腰病是小,心病是大,范甘迪可是如履薄冰的。 “你知道的”范甘迪舔舔嘴唇,瞪着眼睛接着说,“麦蒂进攻的时候就是火箭爆发之时啊!麦蒂的工作主要是进攻与组织进攻,其它队员的任务还是安全为主吧。能得的分保证得到就好了。” 无奈麦蒂这个人生性敏感多疑,加上三年的背伤也拖得他不得不怀疑自己的篮球能力。造成了不是身体跟不上,而是心里不自信带来的后遗症。比如说他老是认为自己的能力不如以前,不配称自己为T-MAC 等等。 翻着三寸不烂之舌,范甘迪又来了:“我现在唯一希望的就是他不要想那么多,老是自我批评也不是个办法。看我们教练队员的大家庭多温暖啊,多尊重他啊,多么在乎他啊。我现在唯一的希望就是他放下所有的包袱,只想着与他亲人一样的队友们在场上好好地玩儿,享受这种玩儿的喜悦。心情好就行了!” 这番滚烫的话,不把麦蒂烫出眼泪来才怪!烫完麦蒂烫姚明:“姚明这孩子,谁受伤都不该他受伤啊!多刻苦的一个孩子……得了教练,省点口水待会儿场上咱说说战术行么? (李佳发自休斯敦)
战斗机 国产战斗机批量装备部队
看了这些图片你岂能不哭~~~~~~~~~~~~~~~ 看了这些图片你岂能不哭~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ 为了生活,这位老婆婆,用她几乎没有力量的身体在支撑背上的重担,因为她必须还要照顾不到5岁的小孙女(父母因为疾病没钱医治,先后离去)。 贴子相关图片: 作者: 心醉何需共举 2006-2-28 15:06 回复此发言 -------------------------------------------------------------------------------- 2 回复:看了这些图片你岂能不哭~~~~~~~~~~~~~~~ 一位为了生存而苦苦挣扎的老爷爷 贴子相关图片: 作者: 心醉何需共举 2006-2-28 15:06 回复此发言 -------------------------------------------------------------------------------- 3 回复:看了这些图片你岂能不哭~~~~~~~~~~~~~~~ 他们一直多么的希望。。。。。。 贴子相关图片: 作者: 心醉何需共举 2006-2-28 15:07 回复此发言 -------------------------------------------------------------------------------- 4 回复:看了这些图片你岂能不哭~~~~~~~~~~~~~~~ 就是在我们北京,就是在这个地方有位明星花了30多万吃了一顿饭 贴子相关图片: 作者: 心醉何需共举 2006-2-28 15:07 回复此发言 -------------------------------------------------------------------------------- 5 回复:看了这些图片你岂能不哭~~~~~~~~~~~~~~~ 请看看我们的孩子在什么样的教室里上课 贴子相关图片: 作者: 心醉何需共举 2006-2-28 15:07 回复此发言 -------------------------------------------------------------------------------- 6 回复:看了这些图片你岂能不哭~~~~~~~~~~~~~~~ 在这里,两个孩子却因付不起区区百来元的学费而被迫缀学在家,过早地肩负起了生活的重担,对他们来说,100多元钱的学 费竟如天文数字 贴子相关图片: 作者: 心醉何需共举 2006-2-28 15:08 回复此发言 -------------------------------------------------------------------------------- 7 回复:看了这些图片你岂能不哭~~~~~~~~~~~~~~~ 这里,我们的孩子,我们的未来,却只能在这样晴天四面风,雨天八方水的教室里苦苦求学 贴子相关图片: 作者: 心醉何需共举 2006-2-28 15:08 回复此发言 -------------------------------------------------------------------------------- 8 回复:看了这些图片你岂能不哭~~~~~~~~~~~~~~~ 就是那张在网上广泛流传,引起了无数争议的照片。 我想,这张照片最大的现实意义不在于它揭示了 社会巨大的贫富反差,更让人 揪心的还在于--当这两个孩子长大之后, 我们又该用什么来保证他们所代表 的两个阶层的和睦相处? 贴子相关图片: 作者: 心醉何需共举 2006-2-28 15:09 回复此发言 -------------------------------------------------------------------------------- 9 回复:看了这些图片你岂能不哭~~~~~~~~~~~~~~~ 我们许多所谓的明星,唱一首歌、卖个笑就是几万甚至是几十万上百万的进帐, 却对依法纳税记性特差。更有甚者,某些明星还拿着捐助希望工程来做秀, 拿贫困地区的孩子来开涮--大家都应该还记得,就是这位大明星, 以捐助希望小学为名,拍了宣传片达到了炒 作的目的之后就拍屁股走人的嘴脸吧 贴子相关图片: 作者: 心醉何需共举 2006-2-28 15:09 回复此发言 --------------------------------------------------------------------------------
呵呵 呵呵我也想申请吧主
呵呵 大家好我也叫杨景文希望大家把它作为一个交流平台
呵呵
欲说还休,欲说还休。,天凉好个秋。 欲说还休,欲说还休。,天凉好个秋。
有意者请联系……………………………………
请为她们鞠躬!!!!!!!!!!!1 生活需要感动感动能让我们找回真实的自我!
大家好!有人认识她吗? 谢了!!!!!!!!!!!!
英雄你来嘛 寻人临沂四中03级十二班马敬有认识的请回个贴
03级电本一班 03级电本一班有路过的吗?睬睬签个名!!!!!!!!!!!!
1
下一页