1. Game Guard error 0
通常发生在Windows 7上,暂无解决方案,Game Guard不支持Windows 7。

2. Game Guard error 120
Game Guard出初化错误,先尝试删除”永恒之塔\bin32\GameGuard”文件夹,不行的话就向朋友拷贝一份可用的过来。

3. 游戏界面为韩文,或者CRITICAL ERROR: Error creating the default fonts
无法创建字体,请使用简体中文版的Windows. 或者把语言设置为简体中文,具体方法为:[控制面板]->[区域及语言选项],将[格式]设置为”简体中文”,[当前位置]设置为中国,[非Unicode程序中所使用的当前语言]设置为”简体中文”。

4. 游戏界面很卡,或者游戏启动报错:CRITICAL ERROR: Couldn’t initialize 3D environment
升级显卡驱动,nVidia的下载页面是:http://www.nvidia.com/Download/index.aspx

5. 无法连接认证服务器
检查路由器设置,为永恒之塔打开7777端口。

6. The installed version of directx is not supported by aion. Aion requires directx9 june 2008 or higher
DirectX版本太旧。DirectX大约每三个月更新一次,所以虽然机器里的版本是9C(XP SP3),但还是要更新一下的,可以选择在线更新,或者下载09年3月份的安装包

7. Themida: An internal exception occured (Address: 0×0)
似乎是Windows 7上才有的问题,目前不知道怎么解决。

 

 

在C#中,@符号不仅可以加在字符串常量之前,使字符串不作转义之用,还可以加在变量名之前,使变量名与关键字不冲突,这种用法称为“逐字标识符”。请看下面的代码:

1
2
3
4
5
6
7
8
9
class @class
{
    public static void @static(bool @bool) {
        if (@bool)
            System.Console.WriteLine("true");
        else
            System.Console.WriteLine("false");
    }
}

这里使用到@的地方有三处,@class,@static和@bool,如果不加@的话,他们都是关键字,编译就会报错。加了@之后,他们和普通的变量名没有区别了,可以正常使用。当然@也可以加在非关键字之前,比如:

1
2
3
4
static void Test(string @str)
{
    Console.WriteLine(str);
}

这样@就一点效果也没有,@str等价于str。

当然,使用关键字作为变量名是非常不推荐的,除非特殊情况,比如和其它语言交互,一般不鼓励使用。

 

2009.4.21:经测试,永恒之塔在64位的Windows 7上可以运行,详情见下文。

我用的是一个Beta之后的内部版本,没试过Beta,据说也是不行的。

搜了一下,原因大约是在游戏开始之前,要先启动一个反外挂程序Game Guard (GG),这个东东的原理基本和病毒一样,以至于卡巴之类的杀毒软件会把它当成病毒处理。而Windows 7天生不支持这种机制,于是GG就挂了,于是永恒之塔也就开不出来了。

根据Wikipedia的说明,GG官方已经宣称目前不支持Windows 7,要等Windows 7正式发布之后才会出补丁。所以要想现在就玩,一定要找个跳过GG的补丁。搜了一把,还真有。在这里可以下载。作者主要是开发天堂II的补丁的,永恒之塔的补丁只有试验性产品。那个网页上放的似乎是最新版,国内一些网站上流传着一个比较老的版本,文件在这里。新版本不适用于国服的客服端,一启动就崩溃,原因不详。老版本可以启动到登录界面,但是无法连接到认证服务器……

总之,目前还有没有可以在Windows 7上运行永恒之塔方法……

2009.04.19更新:

国服收费之后升级了客户端,似乎Game Guard可以跑起来了,但是Themida又出问题(”An internal exception occured (Address: 0×0)”)了,继续没有想法……

Fyyre同学放出一了个针对国服客户端的补丁,但似乎还是不能用-_-

在玩永恒之塔的时候碰到其它的问题的同学请移步永恒之塔运行时错误及解决方案

2009.04.21更新:

感谢Wulfy同学的建议。我今天装了64位的Windows 7,果然可以玩了。不需要打补丁,国服的客户端可以顺利启动并进入游戏,一点问题都没有。不过我很不理解的是,为什么32位的Windows 7就不能用。永恒之塔的程序是32位的,在64位的系统上是以WoW模式运行,按理说应该和在32位的系统上没有区别。如果不是客户端本身做了什么恶心的事情的话,那就是32位的Windows 7有bug了。

另外,Fyyre同学在18号更新了no-gg的补丁。不过昨天我试下来还是没成功。虽然那个补丁可以以”AION.exe -ip:116.211.29.104″的方式启动并连接服务器。但是在点击登录之后就卡往了,也不报错,不知道为什么。有兴趣的同学可以试一下。现在64位的系统已经解决我的问题了,也没必要再换回32位了。据说64位的系统还比32位快10%……


 

colorshift

一个连线游戏。实心方块是电源,灰色圆圈是灯,目标是连接电路把灯全部点亮。灯和电源的颜色必须相同,比如红色的灯要连到红色的电源上,有趣的是颜色可以迭加,蓝色电源和红色电源可以组合出紫色的电流。

点击电路可以将旋转,旁边的信息:Size表示地图的大小,Sources表示电源的数量,Links表示最多可以有多少个迭加出来的颜色,Dummies表示有多少条电路是没用的,Wrap:Enabled表示电路可以穿过边界到另一边去,Mono(我还没玩到这个,不知道具体什么意思)。

Continue reading »

 

还记得“是男人就坚持20秒”么?这是一个类似的游戏,只不过敌人发出的子弹可以击中敌人,也就是说可以用来反击。

dodge

方向键移动,不能发子弹,按空格键开始下一关,开始之前按红色十字架可以买血,开始逃命吧~~

Continue reading »

 

一个消除式的物理游戏,目标是让红星接触到最底层的冰面。

redstar

最大的难点是物理介质是冰,摩擦力比较小,而且2次消除之间有时间限制,所以一有滑动基本就飞出去了……

Continue reading »

 

civiballs

用刀切断锁链,然后让球进入罐子里。注意,每个球只能进入与之颜色相同的罐子。灰色球不能进。

Continue reading »

 

snapshot

我蛮喜欢塔防类游戏的,但就是玩不好-_-

这个矢量塔防,顾名思义就是用矢量画出来的。没有对空对地之分,但是有颜色相克,炮塔类型也很多,具体的看介绍吧。

Continue reading »

 

连接到服务器上之后,第一步要做的当然是拿到虚拟机的列表了:

1
2
3
4
5
6
7
8
private ManagementObjectCollection RefreshVirtualMachines()
{
    ManagementScope scope = new ManagementScope(@"\\" + ServerName + @"\root\virtualization");
    scope.Connect();
    ObjectQuery query = new ObjectQuery("SELECT * FROM MsVM_ComputerSystem WHERE Caption LIKE 'Virtual%' ");
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    return searcher.Get();
}

很简单吧,一个查询就搞定了。得到的ManagementObjectCollection中的每个ManagementObject,对应一个虚拟机的数据。接下来就是生成虚拟机的对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class VirtualMachine
{
    internal VirtualMachine(ManagementObject obj)
    {
        BaseObject = obj;
    }

    private ManagementObject BaseObject { get; set; }

    public string Name
    {
        get
        {
            return BaseObject.GetPropertyValue("ElementName").ToString();
        }
    }

    public VirtualMachineState State
    {
        get
        {
            return VirtualMachineState.GetState(BaseObject.GetPropertyValue("EnabledState").ToString());
        }
    }

    public Guid Id
    {
        get
        {
            return new Guid(BaseObject.GetPropertyValue("Name").ToString());
        }
    }

    public TimeSpan UpTime
    {
        get
        {
            return TimeSpan.FromMilliseconds((double)(ulong)BaseObject.GetPropertyValue("OnTimeInMilliseconds"));
        }
    }
}

每个ManagementObject中包含一个虚拟机的数据,详细的列表在这里。不过我只找到4个有用的:Name, ElementName, EnabledState和OnTimeInMilliseconds:

  • Name是一个GUID,它是虚拟机的标识符。
  • ElementName相当于Display Name,也就是用户所看到的名字。
  • EnabledState是虚拟机当前的状态,有很多,详见后面的代码。
  • OnTimeInMilliseconds表示虚拟机开启了多少时间。OnTimeInMilliseconds indicates how long the virtual machine is on.

EnabledState是一个字符串形式的数字,要把它转换成用户看得懂的数据,还需要一个类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class VirtualMachineState
{
    private VirtualMachineState(ushort id, string name, string displayName)
    {
        Id = id;
        Name = name;
        DisplayName = displayName;
    }

    public string Name { get; private set; }
    public ushort Id { get; private set; }
    public string DisplayName { get; private set; }

    public override string ToString()
    {
        return DisplayName + " (" + Id + ")";
    }

    public static VirtualMachineState GetState(string name)
    {
        ushort id = 0;
        bool useId = UInt16.TryParse(name, out id);
        foreach (VirtualMachineState state in states)
        {
            if ((useId && state.Id == id) || (state.Name == name))
            {
                return state;
            }
        }
        return Unknown;
    }

    private static List states = new List();
    static VirtualMachineState()
    {
        states.Add(Unknown);
        states.Add(Enabled);
        states.Add(Disabled);
        states.Add(Paused);
        states.Add(Suspended);
        states.Add(Starting);
        states.Add(Sanpshotting);
        states.Add(Saving);
        states.Add(Stopping);
        states.Add(Pausing);
        states.Add(Resuming);
    }

    public static VirtualMachineState Unknown = new VirtualMachineState(0, "Unknown", "Unknown");
    public static VirtualMachineState Enabled = new VirtualMachineState(2, "Enabled", "Running");
    public static VirtualMachineState Disabled = new VirtualMachineState(3, "Diabled", "Off");
    public static VirtualMachineState Paused = new VirtualMachineState(32768, "Paused", "Paused");
    public static VirtualMachineState Suspended = new VirtualMachineState(32769, "Suspended", "Saved");
    public static VirtualMachineState Starting = new VirtualMachineState(32770, "Starting", "Starting");
    public static VirtualMachineState Sanpshotting = new VirtualMachineState(32771, "Snapshotting", "Snapshooting");
    public static VirtualMachineState Saving = new VirtualMachineState(32773, "Saving", "Saving");
    public static VirtualMachineState Stopping = new VirtualMachineState(32774, "Stopping", "Shuting down");
    public static VirtualMachineState Pausing = new VirtualMachineState(32776, "Pausing", "Pausing");
    public static VirtualMachineState Resuming = new VirtualMachineState(32777, "Resuming", "Resuming");
}

用VirtualMachineState.GetState把ManagementObject里的EnableState转化成VirtualMachineState。一共有11种可能的状态,最常见的Enabled和Disabled,即开着和关着。

这样就可以获取服务器上的所有虚拟机的信息,然后显示给用户了。

© 2004 - 2011 Leona+Suffusion theme by Sayontan Sinha