2011-08-22 87 views
3

在我的游戏中(也是用C#编写的)我想包含某种定制支持。 速度是一个非常值得关注的问题,因为我打算将游戏玩法的主要部分转移到脚本。 因此,我选择使用C#编写脚本游戏事件和内容。 用户还应该能够在C#中为游戏编写脚本和插件。 (我知道C#不是一种脚本语言btw。)C#脚本和安全

我将向用户提供一个(静态)类,其中包含与游戏进行交互所需的所有功能。 用户也可以提供代码作为源代码(游戏将在这种情况下编译它)。 编译在某些情况下,用户“脚本”也可能会传输给其他玩家。例如,用户可以在家中或其他任何地方构建脚本陷阱。

这里是我的问题:

  1. 安全

    我怎样才能确保提供的代码将被强制提供的API(类)的只能打电话的东西?为了防止用脚本作弊,恶意活动...

    有没有办法在一种虚拟机或低信任环境下运行编译代码?

  2. 速度

    这种方法是否足够快? (每个或每个第二帧从多达100个自定义程序集中调用函数)。 关于此的任何提示?

    也许有可能通过将所有用户内容编译成一个大程序集或其他方式来获得速度优势?

  3. 尺寸

    我怎样才能使编译后的代码尺寸小(除了压缩它)? 由于玩家可能需要下载数十个脚本...

    有没有办法去除不是绝对​​必要的东西?像调试信息或者类名和喜欢...

运行时编译是相当新的给我(这就是为什么我在这里问)。所以最好能指出一些主要的初学者错误和/或安全问题。

编辑:

只是为了澄清: 用户插件/有实施类似“GetAddonInfo”特定功能的脚本或者任何你想叫这将是一个类(也写在C#),“初始化“,”更新“...... 就像从我的抽象”Addon“类派生的正常C#类。

回答

5

你想看看这个返工的老微软示例项目

http://terrarium2.codeplex.com/

的,它基本上是你想要的一切。

代码编译成DLL和运行它们在environemnt

检查的API调用允许。

版本2的重新编写,利用Web服务和许多其他功能。从你的问题,听起来你可能对Terrarium 1更感兴趣。但是,我似乎无法追踪它,所以你可能不得不为更复杂的2.0版本“解决”。

3

研究MEF和MAF - 它们都是设计用于将C#和VB脚本添加到现有应用程序的框架。您可以为脚本创建一个AppDomain,然后使用代码访问安全性来严格限制这些脚本可以执行的操作。

这个问题可能会有所帮助。

Choosing between MEF and MAF (System.AddIn)