Script - ScutGame/Scut GitHub Wiki

此章节介绍如何在服务端使用C#脚本

如何搭建服务端项目工程章节介绍中,可以了解到Script目录下包括Model、CsScript、PyScript和LuaScript子级目录;其中Model目录是存Entity实体类,只能由C#脚本编写;其它目录分别对应相应的开发脚本;接下来我们来看看如何使用C#脚本开发。

配置参数

  • Script_IsDebug:True 表示可以调试代码,否则不能调试,发布时为了提高性能,需要将这个调试选项关闭设置为Flase;
  • ScriptRelativePath:表示脚本引擎监控的根目录路径,默认为“Script”,相对当前项目的路径位置;
  • CSharpRootPath:表示监控脚本根目录下的C#脚本子目录,名称为“CsScript”,开发时只能在此目录下增加子目录才有效;
  • ScriptMainClass:表示C#脚本启动入口文件,默认为“MainClass.cs”,分别继承相应基类,配置启用的是Http服务,或者是Socket服务和WebSocket服务;
  • ScriptMainTypeName:表示C#脚本启动入口的类型名(命名空间+类名),默认为“Game.Script.MainClass”,用于实例化对象;
  • Game.Language.TypeName:表示配置本地化语言配置的类型名,用于实例化配置简、繁或英等语言,只能启用其中一种,放在CsScript/Locale目录下;
  • Game.Action.Script.TypeName:表示协议接口分发配置表达式,格式:“Action命名空间+Action{0}”,其中“{0}”表示ActionId变量,根据客户端请求的ActionId分发到具体的Action类中处理,脚本放在CsScript/Action目录下;
  • Game.Remote.Script.TypeName:表示服务器间通讯入口的配置表达式,格式:“Remote命名空间+{0}”,其中“{0}”表示Route变量(string类型),根据客户端请求的Route参数找到相应的脚本类处理,脚本放在CsScript/Remote目录下;
  • ScriptAsmReferences:表示C#脚本需要引用其它DLL组件的配置,多个以‘;’分隔;例:aa.dll;bb.dll
  • ScriptSysAsmReferences:表示C#脚本需要引用.NET FRAMEWORK的程序集组件的配置,多个以‘;’分隔;例:System.aa.dll;System.bb.dll

脚本使用:

  • Scut引擎使用C#编写,目前脚本入口只能使用C#脚本的MainClass。
  • 脚本执行顺序,先Python脚本执行,再Lua脚本,再执行C#脚本。
  • C#脚本不能禁用,Python和Lua脚本可以配置是否禁用,默认禁用。

项目配置

需要指定使用的C#脚本所在路径,需要设置ScriptRelativePathCSharpRootPath属性;脚本运行启动的初始脚本为MainClass,需要设置文件名ScriptMainClass属性和类型名ScriptMainTypeName属性。

GameServer.exe.config配置如下:


<appSettings>
    <add key="Script_IsDebug" value="True" />
    <add key="ScriptRelativePath" value="Script" />
    <add key="CSharpRootPath" value="CsScript" />
    <add key="ScriptMainClass" value="MainClass.cs" />
    <add key="ScriptMainTypeName" value="Game.Script.MainClass" />
    <add key="Game.Language.TypeName" value="GameServer.CsScript.Locale.SimplifiedLanguage" />
    <add key="Game.Action.Script.TypeName" value="GameServer.CsScript.Action.Action{0}" />
    <add key="Game.Remote.Script.TypeName" value="Game.Script.Remote.{0}" />
</appSettings>

项目DLL组件引用

在项目是需要使用自己的类库或第三方的类库,需要配置ScriptAsmReferences属性;如果使用到.NET的程序集(如System.Web.dll等),需要配置ScriptSysAsmReferences属性。

GameServer.exe.config配置如下

<appSettings>
    <add key="ScriptAsmReferences" value="AA.dll;BB.dll" />
    <add key="ScriptSysAsmReferences" value="System.Web.Extensions.dll;System.Web.Services.dll" />
</appSettings>

脚本热更新

更新脚本步骤

  1. 更新Script/Model和CsScript目录下的脚本文件,会触发Scut重新编译脚本,成功后才替换正在运行中的脚本;

  2. 只监听Model和CsScript(LuaScript、PyScript)目录下的脚本变化,其它目录则不会监听;

  3. Model目录的变化会影响服务器的Cache,它会被清理释放掉,当再次被调用时,会自动从存储区获取,不需要开发者干预;

  4. CsScript(LuaScript、PyScript)目录的变化不会影响服务器的Cache;