RunUO代码研究(一)
来源:互联网 发布:dj软件下载中文版 编辑:程序博客网 时间:2024/05/17 09:36
最近做梦常常梦到自己以前在UO中的往事...呵呵,虽然以前玩的不是很厉害,但是迷恋程度可是不低.最近弄到了一份RUNUO的源代码.忍不住想看看这么精彩的代码是如何写的.自己虽然是个小小的程序员(马上就不干这行了),但是却无论如何和达不到这样高的程度...于是仰慕之余就开始了我的第2次UO之旅.
首先声明一点,由于小弟C#并不是很NB,所以分析出来的东西可能不是很专业,如果能看明白,或者能从我写的东西里得到益处,本人就感到非常欣慰了.哈哈...一句话,对UO还怀念的朋友或者希望一起研究RUNUO代码的朋友,大家多多交流,一起进步.可以联系本人.QQ:1570147 说研究RUNUO代码就可以了.
我用了几天的代码,熟悉了一下全部的类以及他们的继承关系。发现。。。真的是博大精深啊。。。汗都要出来了。。。写的真是@#^&@#看都看不懂。不过不急,饭是一口一口吃的嘛。慢慢来。首先我们找到Main.cs这个文件,找到Main()方法。咱们一点一点看下去就可以发现启动的时候可以选择3种参数-debug,-service,-profile。如果以-service方式启动后,系统将自动建立Logs目录,我们可以分析Logs/Console.log这个文件。中间略过。。。略过。。。重点的东西出来了"while ( !ScriptCompiler.Compile( debug ) )" debug这个参数是你一开始启动时用-debug设置的,默认为false。我没有设置过这个参数,估计是用来调试Script目录里的代码用的。赶快跟踪进去,ScriptCompiler.cs文件里的Compile()这个函数里。同时编译了Scripts/和Scripts/Output/目录中的*.cs和*.vb类。查找所有文件名的代码在GetScripts()这个函数中。我一开始以为编译采用外部调用csc.exe文件。没想到。。采用的方式如此高级。呵呵。。。.CS文件编译完成后开始编译.vb文件CompileVBScripts(); 当没有返回错误以后,开始调用Core.VerifySerialization();验正代码的正确性(本人不确定,还没看Core里的代码)
下面一段代码:
ArrayList invoke = new ArrayList();
for (a=0;a<m_Assemblies.Length;++a)
{
Type[] types = m_Assemblies[a].GetTypes();
for ( int i = 0; i < types.Length; ++i )
{
MethodInfo m = types[i].GetMethod( "Configure",
BindingFlags.Static | BindingFlags.Public );
if ( m != null )
invoke.Add( m );
//m.Invoke( null, null );
}
}
invoke.Sort( new CallPriorityComparer() );
for ( int i = 0; i < invoke.Count; ++i )
((MethodInfo)invoke[i]).Invoke( null, null );
invoke.Clear();
是通过反射功能调用运行Script/目录中所有文件中的Configure()函数。。我对反射不了解。暂时只能了解到这里。
查找下整个项目,我们能发现一共有:
Scripts/Accounting/Accounts.cs public static void Configure()
Scripts/Engines/Factions/Core/Reflector.cs public static void Configure()
Scripts/Engines/Pathing/Movement.cs public static void Configure()
Scripts/Engines/Plants/PlantSystem.cs public static void Configure()
Scripts/Engines/RemoteAdmin/Network.cs public static void Configure()
Scripts/Misc/AOS.cs public static void Configure()
Scripts/Misc/DataPath.cs public static void Configure()
Scripts/Misc/Email.cs public static void Configure()
Scripts/Misc/Gifts/GiftGiving.cs public static void Configure()
Scripts/Misc/Guild.cs public static void Configure()
Scripts/Misc/MapDefinitions.cs public static void Configure()
Scripts/Misc/Poison.cs public static void Configure()
Scripts/Misc/RegenRates.cs public static void Configure()
Scripts/Misc/SE.cs public static void Configure()
Scripts/Multis/BaseHouse.cs public static void Configure()
Scripts/Skills/Snooping.cs public static void Configure()
这些都是初始调用的函数。如果以后你的代码中也有开始就要调用的功能,不妨写入到myClass.Configure()中去。
Configure()函数我分析了几个。。。象DataPath.cs 用来找到你的UO目录.大部分的是类试EventSink.Login += new LoginEventHandler( EventSink_Login );好象是抓事件用的???我不太清楚,看不太懂。。有哪个大大教教我就好了。。象MapDefinitions.cs中是加载地图用的;SE.cs中好象是用来开启武士帝国功能的。不想开就设置Core.SE = False吧;
目前暂时分析到次。。。偶还在看。哎C#刚入门,看的实在是痛苦。如果大家喜欢的话给点鼓励吧。:)
- RunUO代码研究(一)
- RunUO目录结构介绍
- kfs代码研究(一、kfs代码目录结构)
- kfs代码研究(一、kfs代码目录结构)
- 代码研究
- Xcode4.2+SVN代码管理研究(一)
- Xcode4.2+SVN代码管理研究(一)
- Xcode4.2+SVN代码管理研究(一)
- Xcode4.2+SVN代码管理研究(一)
- FBReader 代码编译(Windows环境)和研究(一)
- Gallery4.2 代码研究(一):Gallery2结构分析
- Xcode4.2+SVN代码管理研究(一)
- SWT代码研究
- PigYear病毒 代码 研究
- 代码行为研究方向
- 代码实验室研究系统
- IceFaces代码,回去研究
- x264list操作代码研究
- 已知,前[后]序,和中序遍历,如何简单地求出另一遍历
- 信息主管的得力助手 -- Cell组件
- 王翌:草根网站遭遇拐点
- DCOM揭秘
- Struts辅助开发工具RBManager
- RunUO代码研究(一)
- java.net.NetPermission翻译
- Crystal Report注册码
- 自己做的一个操作索引的例子
- 一个不错的扑克牌控件
- 修改Apache的返回头部信息,让人误认为是IIS的..
- 好网
- Error:ORA-01033:ORACLE initialization or shutdown in progress错误解决
- 快要毕业了,我三个月来的求职历程(续)——又是三个月