RunUO代码研究(一)

原创 2005年04月29日 16:07:00

     最近做梦常常梦到自己以前在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#刚入门,看的实在是痛苦。如果大家喜欢的话给点鼓励吧。:)

如何研究源代码

我们在写程式时,有不少时间都是在看别人的代码。  例如看小组的代码,看小组整合的守则,若一开始没规划怎么看,  就会“噜看噜苦(台语) ”  不管是参考也好,从开源抓下来研究也好,为了了解箇...
  • u013700340
  • u013700340
  • 2014年11月20日 00:52
  • 1679

ecshop二次开发 结构分析和代码研究 呵呵

Ecshop包括的文件夹有admin、api、cert、data、images、includes、js、languages、plugins、temp、theme、wap、widget这些文件夹,和根目...
  • xllily_11
  • xllily_11
  • 2015年07月14日 11:47
  • 1398

13.蟠桃记

蟠桃记 Time Limit: 1000 ms / Memory Limit: 65536 kb Description 孙悟空在大闹蟠桃园的时候,第一天吃掉了所有桃子总数一半多一个...
  • lannister_awalys_pay
  • lannister_awalys_pay
  • 2018年02月02日 17:48
  • 10

《信用风险评分卡研究——基于SAS的开发与实施》学习笔记(1)

所有模型都要进行前期数据准备工作。在此,假设所有数据都已经准备完毕。 注:该系列文章都是学习马姆杜 雷法特著的《信用风险评分卡研究——基于SAS的开发与实施》一书时的学习记录和练手,供以后自己查看。毕...
  • wyymoon
  • wyymoon
  • 2016年01月11日 17:41
  • 3314

kfs代码研究(一、kfs代码目录结构)

一、kfs代码目录结构 src目录下包含cc、java、python几个文件夹,其中cc文件夹是kfs的主要实现部分和一些小工具,包括客户端等;java和python文件夹是kfs客户端的java和...
  • tyzhaoqi2004
  • tyzhaoqi2004
  • 2011年08月12日 17:14
  • 588

《信用风险评分卡研究——基于SAS的开发与实施》学习笔记(2)

%macro CalcWOE(Dsin,Invar,Dcvar,WOEvar,Dsout); /*频率表*/ proc freq data=&Dsin noprint; tables &Invar*...
  • wyymoon
  • wyymoon
  • 2016年01月15日 17:46
  • 1553

如何研究别人的代码

边研究边画流程图,写文档等
  • dongfengkuayue
  • dongfengkuayue
  • 2014年08月19日 11:13
  • 480

NopCommerce 源码研究(三)

上一章说道,GetWidgetZones()方法返回了IWidgetPlugin接口, 那么,IWidgetPlugin这些插件如何注册的呢,这就要看下面了: 路径:\Presentation\Nop...
  • xue251248603
  • xue251248603
  • 2017年02月06日 17:10
  • 394

Delphi 中 COM 实现研究手记(一)

前言     前些日子用 Delphi 写了一个 Windows 外壳扩展程序,大家知道 Windows 外壳扩展实际上就是 COM 的一种应用 -- Shell COM,虽然整个程序写得还算比较顺利...
  • procedure1984
  • procedure1984
  • 2009年02月18日 18:27
  • 1176

研究linux内核的目的

一.研究内核的目的  欲举其事,先正其道。要谈论内核的研读以及交流心得,前提必须得有一个恰当准确的目的,方能收获良多。 很多人都有这样一个疑惑,为什么要研究内核呢?我们又不是内核开发者(或...
  • SunboyJohn690905084
  • SunboyJohn690905084
  • 2013年11月08日 18:14
  • 1450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RunUO代码研究(一)
举报原因:
原因补充:

(最多只允许输入30个字)