文字播报型的自动战斗系统该如何保障不出现漏洞?
目前是想做一款纯文字类网页游戏,战斗模式采用文字播报模式
看到过一个别人写的是,本地进行战斗计算,最后把战斗结果post到服务器上,这种很容易造成漏洞,直接在本地修改结果不停的post
如果同步战斗状态的,感觉会太复杂,有没有方便的方法不容易出漏洞
我将php和c#用socket连接在一起,可以进行数据交换计算,可以利用这个做吗?
回复内容:
战斗过程中如果玩家不能介入的话,直接服务端算好整场战斗过程,一次性下发到客户端慢慢播文字就是了,你指的复杂是什么。用socket的话,需要实现一套基于socket的游戏协议,好处是省流量、通信灵活,服务器主动推送信息容易。如果想简单点,可考虑直接用http短连接通信,但对于一些服务器主动下行的功能不好实现。 矮油,我觉得我应该很有资格回答这个问题,因为我做的游戏就是这样的。
看到楼主是用php,那么觉得我更有资格了。
首先分为两种情况。
1. 所有战斗都在服务器一次性完成,客户端只是简单的播报结果
这是最简单的,也是我现在用的方案,也是绝大多数古典页游用的方法。
客户端提交一个战斗请求,然后在服务器完全全部计算,将结果用json或者其他什么方法传给客户端,然后浏览器再用js解析出来。
注意:这种方法也不能完全的杜绝客户端作弊,最典型的例子,对于一些有消耗的战斗(无论是有冷却时间,还是入场需要消费资源),玩家开两个窗口然后同时点击战斗按钮,可能会出现双份奖励。我的游戏就曾经出现过这种bug。
此外,还存在我在后台改了数据没有刷新缓存导致前台用户玩的时候出现崩溃的问题。
总之这种方法难度不高,对服务器压力也小(因为是集中计算)。
缺点是无法响应玩家输入,也就是玩家并不能在战斗中进行控制,这就要看你的游戏是否要求玩家在战斗中进行操作了。
2.战斗会一边进行一边回传到客户端,响应客户端输入之后再传到服务器。
这种会比较难,其实这里麻烦的问题反而不是作弊,而是服务器负载……只要做好负载反而就没有什么问题。
方法有很多种,你说的socket是一种,但我不懂……(-_-|||)。
此外还有node.js系列的http://socket.io,更轻量,毕竟涉及C#就要涉及.net那种大而厚的东西,node.js相比之下更轻。
当然如果不选PHP的话,也有更多其他方案,比如纯http://asp.net或者纯java,甚至可以用现代的手段比如unity,当然这就扯远了……
所以如果要我来做的话,估计还是会选传统的js轮询ajax的办法,不断去服务器查。会更吃一点服务器资源(毕竟每次玩家操作都要走一次完整的http request),所以对于我们这种VPS放国外的屌丝可能会遭遇延迟问题。因此,我大概会把游戏做成延迟不影响游戏体验的模式。
举例就是做一个万智牌游戏,我点击出牌的时候,动画直接播放出牌效果(但此时还处于http request中),然后画面出现“电脑正在思考中”,然后播放电脑的出牌结果。
当然还有个办法就是你说的,把一些简单的东西放到客户端,但实际上这些内容必须还是要传到服务器在计算一次,最终回来的时候覆盖客户端算的结果,并且要保证从头到尾不使用客户端的数据。客户端计算的数据“仅仅是处于让玩家感受速度快”。
这点其实很常见,比如大型网站点赞,点赞的瞬间就+1了,其实只是客户端计算而已。刷新之后就会变成真实数据。
如果负载实在扛不住,可以考虑把游戏的一部分做成不消耗服务器的模式(例如你的游戏设定,在上面玩2小时可以获得100点游戏内战斗力,那么你就设置一个2小时的远征任务,这个任务挂好了之后就获得100点战斗力,又或者刷1天怪物平均可以获得3件装备,那么你可以设置一个副本,冷却时间24小时,必掉3件装备)。
总体上玩家的收益是相同的。
我倾向于把游戏做成不那么肝(也就是不需要反复算时间,一直在屏幕前点点点)。因此服务器负载倒不是那么大,512M1核的低配VPS,长期负载也就0.0x,所以还跑了几个其他业余利用资源……
有想到再补充
利益相关:RPG类型纯文字类网页游戏 莉诺达斯 - Linodas.com 制作人。
(PS:前几天打通了奥里与迷失森林,所以在首页放了一个全屏跳转推荐这款游戏,不要以为进错网站了。。 不要本地计算,用服务端计算后下发客户端就好。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
