问题标签 [mud]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
93 浏览

sockets - select.select() 在我的 MUD 服务器中阻塞时它不应该

我正在使用miniboa 库进行非阻塞 telnet 式套接字编程。

该库包含一个简单聊天服务器的演示。

在809行,在poll()函数中,系统使用select.select()函数。在 miniboa.py 文件中运行演示服务器时,服务器不会阻塞此功能;它执行并继续而不会跳过一个节拍。

我正在编写一个基于该代码的带有网络代码的 MUD,但是在我的 MUD 服务器中(请参阅下面的链接),服务器每次都会阻塞同一个调用。

在我的 MUD 的network.py库中,在第 68 行,服务器执行该poll()函数。这与在简单聊天服务器中执行的功能相同,但当它在我的 MUD 服务器中执行时,它会阻塞select.select()调用。

我不知道它为什么会阻塞,但它会阻塞,并且在用户发送数据之前循环不会重复。如果没有人发送任何东西,服务器就会等待。

有谁知道为什么会这样?我很乐意回答有关代码的任何问题,它是开源的,因此您可以查看所有代码并根据需要使用它。

我很感激你们能提供的任何帮助。自从我多年前第一次玩 MUD 以来,我就一直梦想着制作一个 MUD,我害怕继续研究它,直到我解决了这个错误。在我修复此错误之前,服务器将无法按应有的方式工作。

TL;DR:我的服务器在等待客户端输入时卡在了select.select()函数中,尽管它不应该在那里暂停。我无法弄清楚它为什么会阻塞。

0 投票
1 回答
3099 浏览

python - MySQL 和 Python - 如何使用用户输入检查条目?

我们正在创建一个基本的 MUD,并希望它从 MySQL 数据库中保存/加载,作为初始命令,我们希望有一个初始的“你有角色吗?” 提示,我们将“否”部分整理出来,并成功保存到数据库中。但是,我在“是”部分遇到问题,更具体地说,让它检查数据库中针对用户输入的特定条目以确保它存在,从而加载数据。

这是我当前的代码:

我没有任何错误,它只是从第一个 if 语句到第二个,保存了“新”名称(尽管由于条目已经存在,所以没有对数据库进行任何更改)

0 投票
1 回答
3744 浏览

javascript - 沙盒化 Node.js 模块 - 可以吗?

我正在学习 Node.js (-awesome-),并且正在玩弄使用它来创建下一代 MUD(基于文本的在线游戏)的想法。在此类游戏中,有各种命令、技能、咒语等可用于在您四处奔跑并探索数百个房间/位置时杀死坏人。一般来说,这些功能是相当静态的——你通常不能创造新的法术,或者建造新的房间。但是,我想创建一个 MUD,其中定义法术和房间等的代码可以由用户编辑。

这有一些明显的安全问题;例如,恶意用户可以上传一些分叉子进程“rm -r /”的 JS。我不太关心保护游戏的内部(我会尽可能地保护,但在一切都是公开的语言中你能做的只有这么多);我总是可以跟踪 wiki 风格的代码更改,并惩罚例如使服务器崩溃的用户,或将他们的权力提高到 9000 等。但我想牢固地保护服务器的操作系统。

我已经查看了类似问题的其他 SO 答案,大多数人建议运行 Node.js 的沙盒版本。这在我的情况下不起作用(至少不是很好),因为我需要用户定义的 JS 与 MUD 的引擎进行交互,而 MUD 的引擎本身需要与文件系统、系统命令、敏感的核心模块等进行交互。假设所有这些事务都可能在引擎中进行 JSON 编码,发送到沙盒进程,进行处理,然后通过 JSON 返回到引擎,但如果每个获取玩家生命值的调用都需要传递给另一个进程。更不用说它是同步的,我宁愿避免。

所以我想知道是否有一种方法可以“沙箱”单个节点模块。我的想法是,这样的沙箱需要简单地禁用“要求”功能,一切都会很幸福。所以,由于我在 Google/SO 上找不到任何东西,我想我会自己提出这个问题。

0 投票
0 回答
100 浏览

java - 如何使用 apache telnet 获得“线路周转”提示

我正在使用Apache telnet连接到MUD游戏。

这是我的输出:

这是标准的 telnet 输出:

我认为,这是因为线的处理方式StreamReader

我相当肯定它while (line != null) {readInputStream有问题的。我认为并非每条线都通过了。

0 投票
3 回答
178 浏览

ruby - em-simple_telnet.rb 错误'pause_and_wait_for_result'

对于MUD 客户端,我使用的是 telnet。

我正在尝试像 Apache 那样获取天气,但这个错误似乎是因为我没有正确使用em-simple_telnet API

错误:

代码:

这是与天气服务的 telnet 会话:

0 投票
1 回答
203 浏览

parsing - 关于构建网络可访问、多用户、可编程、交互环境的一些问题

介绍

我已经尝试构建这个项目好几个星期了,并尝试了多种我无法理解的解决方案。让我稍微描述一下这个项目。它是一个基于文本的服务器,玩家可以登录(通过 telnet 或客户端),本质上就像一个 MUD。然后他们可以创建“对象”并与之交互,赋予它们“动词”和“属性”。

服务器基本上只是一个“对象”的数据库,每个对象都有一个 ID、一个名称、一个位置(这是另一个对象)、它的内容列表(对象)和一些其他标志。对象可以有“动词”和“属性”。属性只是存储的数据(字符串、整数、浮点数、w/e)。动词是方法/功能。使用诸如“将某些东西放入容器”之类的命令与对象进行交互。服务器的旧版本已经存在,它被称为 LambdaMOO。我正在尝试重新创建它,因为它已经很长时间没有更新了。

您可以更深入地了解对象、动词和属性应如何工作:http ://bit.ly/17XIqjY

一个例子

让我描述一下我想要什么。想象我们有一个对象。对象 #256,它被称为“按钮”。它具有属性“计数”以及从其父级继承的所有默认属性(即“描述”)。它上面有一个“动词”,称为“推”。该动词包含以下代码:

当玩家在服务器上键入“push button”时,“push”动词将运行并输出

如果您然后look在按钮上,您将看到它的更新描述。

请注意,player在上面的脚本中是指执行动词的玩家的对象。tell是另一个动词,在玩家对象上。然而,tell动词有一个标志,表示它可以从其他动词执行。

什么语言?

我的主要问题是“动词”可以使用哪些语言?我试过使用 node.js 和 'vm' 库。我试过使用 C# 来解析 C#。我试过使用 C# 来解析 JavaScript。我不断遇到的问题是我无法控制动词和属性的权限。如果我将它们转换为 JavaScript 中的文字函数,我无法确定它们在哪个对象上运行以及它应该具有哪些权限。如果用户在另一个用户对象上调用函数,如果权限不正确,我无法拦截该调用并停止它。对于动词代码使用哪种语言,我并不完全在意,它只需要“沙盒化”即可。属性仅在用户设置为可读/可写时才需要,与动词相同。

我还需要能够将这些变量注入动词:(主要由键入的命令确定,除非该动词是从另一个动词调用的)

我还需要能够从任何其他对象访问任何对象(只要权限有效)。

然后push button,用户可以将按钮对象的 size 属性平方。

推荐阅读

我强烈建议您阅读http://bit.ly/17XIqjY上的文档,以更深入地了解系统应该如何工作。

还建议您阅读以下文档,因为 μMOO 基于 LambdaMOO 及其方法:

0 投票
1 回答
12408 浏览

c++ - 警告:数组下标高于数组边界 [-Warray-bounds]

我遇到以下代码抛出警告的问题,希望您能帮助我:

DICE_NUMBER在我的头文件中定义为 0。

显然,0 不超过数组的大小。

数组定义为。

我完全不知道为什么会这样做,因为 0 显然在数组的范围内。我一半的引擎代码现在抛出这些数组绑定错误,我有大约 30 个,但对我来说没有一个是有意义的。

这是make的输出:

它也会发生:

我的头文件中的定义:

我知道DICE_BONUS会(现在才意识到),但我一生都无法弄清楚为什么DICE_NUMBER会这样。

哦。问题是那里的第三个整数输出fprintfisDICE_BONUS但它在另一行,我以为编译器警告我DICE_NUMBER,它警告我关于 BONUS。

0 投票
2 回答
320 浏览

python - 我需要做什么/学习让我的基于文本的 Python 游戏可供用户通过 Internet 访问

我正在通过制作基于文本的游戏来学习 Python。我需要做什么才能让这个游戏上线?显然,它非常不发达,甚至无法播放。但我只是想早点知道,这样我就可以朝着正确的方向前进并学习。

0 投票
1 回答
121 浏览

c++ - MySQL数据库和内存之间的实体持久化

首先,我的实际问题

我在地图中有一个共享指针,当地图本身中除了共享指针之外没有其他引用时,我想从地图中删除该共享指针,因此目标被释放。我怎样才能做到这一点?或者,有什么更好的设计来解决我的问题?

背景如下:

出于怀旧,我一直在使用 MySQL 后端用 C++ 编写 MUD 引擎。我现在正处于持久实体的阶段(在这种情况下,例如帐户、角色等)。我在找出实现这一点的最佳方法时遇到了一些麻烦,因此决定寻求一些建议。

我目前的持久化架构是这样的,以字符为例

字符实体 -> 字符存储 -> 字符持久化 -> MySQL

角色实体是指角色本身,类似于MVC中的模型。它除了数据之外什么都没有,只知道其他实体。

字符存储是当前负责在内存中保存字符实体实例的容器。当请求通过 ID 或名称查找字符时,它会检查其内存,实现为包含 UUID 的 std::string 到 std::shared_ptr 的映射。如果我们有一个实例已经在内存中,我们传回一个共享指针,如果没有,我们向持久层请求它,将它存储在映射中,然后将一个共享指针传回给它。

持久层是抽象的,有一个 character_persistence 接口,它有一个 mysql_character_persistence 的具体实现,所以我可以很容易地切换到不同形式的持久性。

0 投票
1 回答
198 浏览

c++ - C/C++ MUD 代码中的 asm volatile 问题

我正在和一个朋友一起开发一个旧的 MUD 代码库,作为一个爱好项目,但是我在让代码在除 debian(特别是 x386)以外的任何操作系统中编译时遇到问题。问题是(主要)是因为我真的不了解修改的一些 asm 行。尝试在 VS 中编译时收到的错误是“错误 c2059:语法错误”第 29 行。关于如何在 x64 操作系统上编译的任何想法?