-3

我正在尝试为我一直在设计的在线游戏编写一个 php 战斗系统。

简而言之,它将是一个 MMORPG,玩家的统计数据将保存在几个 MySQL 表中,怪物数据也将保存。

简而言之,我担心人们通过编辑怪物的 hp 来做某事,所以它说他们杀死了怪物,将他们的 HP 最大值保留在他们的计算机上(因为更新 MySQL 条目不是不切实际每转一圈?),或者别的什么。

我仍然只是 PHP 的中级,所以我不确定如何隐藏这些值以防止用户更改,但不会通过每次发生攻击时更新 MySQL 表来造成严重的服务器拥塞。

有人可以告诉我以下一项或多项:

  1. 有没有办法单独在 PHP 中隐藏这些活动变量以防止被编辑以允许作弊?

  2. 如果没有,或者如果它不是非常服务器友好,那么在 Java 中是否有一个相对简单的小程序,或者用于控制主机变量的应用程序可以以相对简单的方式进行编程?

目前怪物只有普通攻击,玩家只有攻击,不过我打算先扩展玩家的技能攻击。

4

1 回答 1

4

您永远不应该相信浏览器提供给服务器的内容。浏览器可以发出它想要的所有请求(例如,向前移动 5000 英尺),但如果服务器查看请求并说“哇,你不能这样做!最大速度是 2 英尺/秒”!然后你只是拒绝“移动请求”,或者你忽略它,你的选择取决于实施。

例如,客户端(无论是浏览器还是桌面上的应用程序)都可以存储它想要的所有数据。它可以存储HP和资源。服务器也有自己的副本。如果有人要使用一些内存更改工具(例如 Cheat Engine),他们所能做的就是修改客户的数据(例如,而不是 100 美元到 1,000,000 美元)。但这没有任何意义,因为如果客户端请求购买 50,000 美元的商品,服务器将验证该请求。它查看服务器上的资金,而不是客户端,并注意到用户资金不足。只要告诉用户“钱不够”,npo 交易就完成了。

如果客户端要尝试弄乱客户端的内部存储器,我不会担心客户端不再正常运行。只要确保服务器批准所有游戏状态修改请求,一切都会好起来的。

如果您想避免向网络发送垃圾邮件并保持用户的移动有效,则客户端可以假设服务器将批准请求。因此,您可以允许用户移动一定距离并在几秒钟后发送一个请求,或者您可以发送多个请求并在等待服务器批准请求时显示角色移动。如果您发出多个请求并且服务器需要一段时间来响应,这会为客户端带来与服务器不同步的新问题。

通常,您必须发送大量请求,并且每次用户执行某项操作时您都必须发送请求,因为您希望其他用户也看到您在做什么。没有办法解决这个问题,但您可以使用巧妙的压缩和延迟策略,让客户端运行更顺畅。

如果您想避免一直访问您的 SQL 服务器,您可以使用缓存工具,例如Memcache,PHP 非常方便地支持该工具。Memcache 可以在内存中存储您需要的任何内容,以实现非常快速的数据存储。当然,这有一些警告,因为您需要将缓存与数据库同步,反之亦然。

于 2012-09-18T23:33:32.250 回答