泓泰

网络游戏制作外挂原来这么简单好玩

admin
网络游戏制作外挂原来这么简单好玩-第1张-游戏相关-泓泰

这篇文章有不明白的地方可以在下方留言讨论, 另外,欢迎关注,更多有趣的前端知识

该以守望先锋举例,其他游戏同理

外挂实现了什么功能:

首先我们在守望先锋中【zhōng】所【suǒ】见【jiàn】到的【de】外挂,功能无非都是辅助瞄准【zhǔn】,透视两个主要功能。更进阶一些往细里说,也有大【dà】家【jiā】听说过【guò】的包【bāo】括自动近战、源氏自动刀、狂【kuáng】鼠自瞄【miáo】根据【jù】目标距离可【kě】以计算抛物线的下落点【diǎn】自动帮你抬高准星等辅助【zhù】功【gōng】能【néng】。

可能有些人会听过一些名词比如,内存挂,脚本挂,封包挂,等等。

接下来我们详细聊聊

外挂如何实现

以【yǐ】目前比较流行【háng】的【de】内存挂举例,不知道大家以前【qián】是否用【yòng】过金山游侠或者八门神器【qì】这类内存修改器【qì】。其实【shí】在单机游戏中修【xiū】改【gǎi】数值大体上跟网络游【yóu】戏实现方【fāng】向差不多。

为什么修改内存就能对游戏造成影响

游【yóu】戏中所有你能看【kàn】见的东西,部分你【nǐ】看【kàn】不见的东西都会【huì】在内存里面,最直观的就是数值比【bǐ】如【rú】生命值【zhí】,技【jì】能CD。单机游戏【xì】感受最直观【guān】,修【xiū】改了某个【gè】数值【zhí】马上就会提现在游戏中。

为什么网游几乎都无法直接修改数值

在守望先锋中有可能把某个英雄(比如死神)生命值改为十万吗?

目前看来不【bú】可能,因为【wéi】平时的对战中【zhōng】,你的所有【yǒu】数值都是在和服务端【duān】交换【huàn】,在屏幕中看见200这个【gè】数值仅仅【jǐn】只是展示,修改为十万对于服务【wù】器(权威端)和【hé】其他【tā】玩家而已还是200。

大概流程如下

玩家A:死神 -> 对某个【gè】方向开枪 -> 发送到服务【wù】端,服务【wù】端进行【háng】计【jì】算 -> 告知B玩家死亡

其他网络游戏也类似这种【zhǒng】原理,当然还有【yǒu】一【yī】些比如某【mǒu】些吃鸡【jī】游戏【xì】就很简单直接就【jiù】是玩家A开枪 击【jī】中玩家B发送到服【fú】务端,这种通【tōng】常【cháng】就会出现秒【miǎo】杀【shā】,锁血这一类外挂。

脚本挂和封包挂是什么

这两种主要从实现技术上【shàng】来区分。脚【jiǎo】本挂【guà】通常可以认为【wéi】鼠标宏【hóng】或者某些一直执【zhí】行轻量机械性重复操【cāo】作【zuò】的程序,比如 连点工具【jù】

而【ér】封包挂完【wán】全就不同于脚本挂和内存【cún】挂了【le】,以前某些mmorpg网【wǎng】游【yóu】出【chū】现过,通常【cháng】来做脱机外挂,可能工【gōng】作室会经常使用,这种【zhǒng】外挂制作成本挺【tǐng】高的,因为必须要解析客户【hù】端和服【fú】务【wù】端之间的通信协议【yì】,并且自己编程从【cóng】新实现和【hé】服务端的【de】通信。守望先锋这类应【yīng】该比【bǐ】较少

透视技术原理

来具【jù】体聊聊透视是怎么实现的,通【tōng】常服务端会把全部角【jiǎo】色发送到客户端,因为如果【guǒ】只有玩【wán】家看见的时候【hòu】才【cái】告诉客户端的【de】话就会出现【xiàn】延迟,服【fú】务端需要【yào】实时【shí】计算遮挡关系【xì】,需【xū】要完整的3D场景建模数据等等,计【jì】算量【liàng】会成倍增长而且体验也差。

举个例【lì】子如果由服务端【duān】计算【suàn】,某【mǒu】个敌人突【tū】然从墙【qiáng】后面出现,这【zhè】时候才告【gào】诉客户端,客户端就需要加载模型,需要首次【cì】初【chū】始化角色,需【xū】要构建【jiàn】顶点【diǎn】索引uv,可能还需要编【biān】译这个角色shader等【děng】等很可能客户端就会卡顿一下【xià】,这时候【hòu】敌【dí】人【rén】两【liǎng】三枪就干掉你了。

那么外挂如何做到看到所有敌人位置的呢?

通常会【huì】通过c***engine软件反编【biān】译【yì】和调【diào】试游【yóu】戏程序【xù】,找【zhǎo】出角色坐标,什么英雄,当前【qián】生命值等等属性所在的内【nèi】存块偏移【yí】,总而言之就是前面说的游戏中所有你能看见的东西,部分你看不见的东西都会在内存里面。

外挂的透视,通常【cháng】通过方框标注玩【wán】家所【suǒ】在位置,那么外挂就在游戏【xì】窗口上【shàng】再打开一个透明窗口,这个窗口和守望先锋完全不同进程,然【rán】后根据读出来的坐标信【xìn】息不断【duàn】地【dì】绘制在这【zhè】个透明窗口上【shàng】,当然这【zhè】就【jiù】会涉【shè】及坐标转【zhuǎn】换,因【yīn】为读取出来的是【shì】世界坐标xyz,需要转换为屏幕【mù】坐标xy。这【zhè】就【jiù】是【shì】为什么【me】守望先锋外挂通常会要【yào】去【qù】窗口模式或者无边框窗口模式【shì】来【lái】运行

自瞄的技术原理

我们有【yǒu】了角色坐标,而对【duì】辅助瞄准【zhǔn】来说,他【tā】要做【zuò】的事【shì】情就是在你开枪时捕获【huò】鼠标【biāo】键盘【pán】消息,然后帮【bāng】你把准心移动到头【tóu】部【bù】,同样的头部坐标也是从内存获取。

这里【lǐ】控【kòng】制【zhì】鼠标有通过【guò】驱动层模拟也有直【zhí】接【jiē】通过守望先锋内部写【xiě】好的【de】代码在内存call的【de】方式,当然这两种都是软件层面都有一定的防止和检查手【shǒu】段。所以【yǐ】在江【jiāng】湖【hú】上还有一种U盘挂,直接假装自己是个usb鼠标,真真【zhēn】正正的硬件,相当于我只【zhī】不过多插了个鼠标,就跟守望先锋或者某个进【jìn】程【chéng】毫无关【guān】系【xì】了

然后还有一【yī】种原理稍微简单一点的自瞄,它不需要读取内存,方法简单粗暴【bào】,在早【zǎo】期的时候大量【liàng】使用。下次再继续聊。如果大家感兴趣下次【cì】一起再说说王【wáng】者【zhě】荣耀,格斗动作【zuò】类等等【děng】全客户端计算【suàn】的游【yóu】戏如何【hé】防止【zhǐ】修改数据外挂,因为【wéi】按照我们【men】上【shàng】面聊的如果【guǒ】一个游戏【xì】数据不是【shì】在服【fú】务【wù】端计【jì】算之后发【fā】到客【kè】户端展示就【jiù】会产生外挂修改客户端的【de】数据。

标签: #cf姿态自瞄脚本