泓泰

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

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

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

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

外挂实现了什么功能:

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

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

接下来我们详细聊聊

外挂如何实现

以【yǐ】目前比较【jiào】流行的内存挂【guà】举【jǔ】例,不知道大家【jiā】以前是否用过【guò】金山【shān】游侠或者八门【mén】神【shén】器这类内【nèi】存修改器【qì】。其实在单机游戏中修改数【shù】值大体上跟网络游【yóu】戏实现方向差不多。

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

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

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

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

目前看【kàn】来不可能,因为平【píng】时的对战中,你的【de】所【suǒ】有数值【zhí】都是在和服务【wù】端交【jiāo】换,在屏幕中看见【jiàn】200这【zhè】个数值【zhí】仅【jǐn】仅只是展示,修改为十万对于服务【wù】器(权威端)和其他玩家而已还是200。

大概流程如下

玩家A:死神 -> 对某个方【fāng】向开枪 -> 发送到服务端,服【fú】务端进【jìn】行计算【suàn】 -> 告知B玩家死亡

其他网络游戏也类似这种【zhǒng】原理【lǐ】,当【dāng】然还有一些比如某些吃鸡游戏【xì】就【jiù】很简【jiǎn】单直【zhí】接就是玩【wán】家【jiā】A开枪 击中【zhōng】玩家B发【fā】送到服务端,这种通常就会【huì】出现秒杀【shā】,锁血这一类【lèi】外挂。

脚本挂和封包挂是什么

这两种主要从实【shí】现【xiàn】技术上【shàng】来区【qū】分。脚本挂通常可以认为鼠标宏或者某些【xiē】一直执行轻【qīng】量机械性重复操作的程序,比如 连点【diǎn】工【gōng】具【jù】

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

透视技术原理

来具体聊聊透视是怎么实现的,通【tōng】常服务【wù】端会把全部角色【sè】发送到客户端,因为如果只【zhī】有玩家【jiā】看见的时【shí】候才【cái】告诉客【kè】户端【duān】的话就会出现延迟【chí】,服【fú】务端需要实时计算遮【zhē】挡【dǎng】关系,需要完整的3D场景建模数据等等【děng】,计算【suàn】量【liàng】会【huì】成倍增长而【ér】且体验【yàn】也差。

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

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

通【tōng】常会通过c***engine软件【jiàn】反编【biān】译和【hé】调【diào】试游戏程序,找【zhǎo】出角色坐标,什【shí】么英雄,当前生【shēng】命值等等属性所在的内存块偏移,总而言之就是前面【miàn】说的游戏中所有你能看见的东西,部分你看不见的东西都会在内存里面。

外挂的【de】透视,通【tōng】常通【tōng】过【guò】方框标注玩家【jiā】所在位置,那么外挂就在【zài】游戏窗口上【shàng】再打开一个透【tòu】明窗口,这个窗口【kǒu】和【hé】守望先【xiān】锋完全不同【tóng】进【jìn】程【chéng】,然后根据读出【chū】来的坐标信息不断地绘【huì】制在这个透明【míng】窗口上,当然这就会涉【shè】及坐标转换,因为读取出来【lái】的是世界坐标xyz,需【xū】要转【zhuǎn】换为屏幕坐标xy。这就是为什么守望先【xiān】锋【fēng】外挂通常会要去窗口模【mó】式或者无【wú】边框窗口模式来【lái】运行

自瞄的技术原理

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

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

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

标签: #cf姿态自瞄脚本