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#脚本所在路径,需要设置ScriptRelativePath
和CSharpRootPath
属性;脚本运行启动的初始脚本为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>
脚本热更新
更新脚本步骤
-
更新Script/Model和CsScript目录下的脚本文件,会触发Scut重新编译脚本,成功后才替换正在运行中的脚本;
-
只监听Model和CsScript(LuaScript、PyScript)目录下的脚本变化,其它目录则不会监听;
-
Model目录的变化会影响服务器的Cache,它会被清理释放掉,当再次被调用时,会自动从存储区获取,不需要开发者干预;
-
CsScript(LuaScript、PyScript)目录的变化不会影响服务器的Cache;