Lineage2 Packets(天堂2数据包协议)

Lineage II 协议

作者TechnoWiz@rd
最后编辑日期2007年11月23日

内容

1. 一般信息
2. 客户端 -> 登录服务器包
3. 登录服务器 -> 客户端包
4. 游戏服务器 -> 客户端包
5. 客户端 -> 游戏服务器包

1. 一般信息

   每个数据包由数据包大小(2 字节)、数据包类型(1 字节)和参数块(长度可变)组成。此外,服务器数据包
授权后,会在数据包末尾添加校验和,并用零填充,使数据包大小为 8 字节的倍数。校验和可以
可通过以下函数计算:

unsigned long checksum( unsigned char *packet, int count )
{
   long chksum = 0L;
    for ( int i = 0; i < count; i += 4 ) chksum ^= *((unsigned long *)&raw[i]);
    return chksum;
};


血统协议使用 6 种不同的数据类型:

char    – 取值范围为 -128 到 127,长度为 1 字节。short
   取值范围为 -32768 到 32767
 长度为 2 字节    。int – 取值范围为 -2147483648 到 2147483647,长度为 4 字节。int64 – 取值范围为 -9223372036854775808 到 9223372036854775807,长度为
8  字节。float
 –取值  范围为 2.22507e-308 到 1.79769e+308,长度为 8 字节。string
 – Unicode (UTF-8)编码的文本字符串。每个字母由两个字节表示,第一个字节是字母代码,第二个字节是
	 代码表编号。行尾指示符是代码为 0 的字符。

 
:对于不熟悉PC内存数据存储原理的人,我将解释一下,字节是按相反的顺序存储的。也就是说,如果我们需要写入
如果要将整数类型表示的数字 10 放入数据包中,那么我们必须:

1)将其转换为十六进制表示法——得到 00 00 00 0a
2)反转字中的字节顺序——得到 0a 00 00 00

   授权服务器数据包使用 Blowfish 算法加密。默认密钥位于四个编年史中:
5F 3B 35 2E 5D 39 34 2D 33 31 3D 3D 2D 25 78 54 21 5E 5B 24。密钥末尾添加了一个代码为 0 的符号。在 Interlude 版本中,加密类型发生了变化——
初始化数据包包含一个为每个客户端随机生成的动态 Blowfish 密钥。该数据包首先使用 XOR 算法进行加密(密钥由……生成)。
随机放置在数据包末尾),然后使用静态密钥通过 Blowfish 算法进行加密。默认情况下,静态密钥为
6B 60 CB 5B 82 CE 90 B1 CC 2B 6C 55 6C 6C 6C 6C。所有后续数据包都将使用动态 Blowfish 密钥加密。登录请求数据包也需要
使用 RSA 算法加密。密钥由以下部分组成:B = 1024,E = 65537,N = 在初始化数据包中传输。这三部分共同构成完整的 RSA 密钥。
密钥。数据包中的N 个字节使用以下函数进行加密:

void scrambleMod( char *n )
{
      typedef unsigned char byte;
       int i;

      for ( i=0; i<4; i++ ) {
            byte temp = n[0x00 + i];
            n[0x00 + i] = n[0x4d + i];
            n[0x4d + i] = temp;
      };

      // 步骤 2 将前 0x40 个字节与后 0x40 个字节进行异或运算
      for ( i=0; i<0x40; i++ ) {
            n[i] = (byte)(n[i] ^ n[0x40 + i]);
      };
 
      // 步骤 3 将字节 0x0d-0x10 与字节 0x34-0x38 进行异或运算
      for ( i=0; i<4; i++ ) {
            n[0x0d + i] = (byte)(n[0x0d + i] ^ n[0x34 + i]);
      };

      // 步骤 4 将最后 0x40 个字节与前 0x40 个字节进行异或运算
      for ( i=0; i<0x40; i++ ) {
            n[0x40 + i] = (byte)(n[0x40 + i] ^ n[i]);
      };
};

要解密,您可以使用以下函数:

void unscrambleMod( char *n )
{
      typedef unsigned char byte;
       int i;

      // 步骤 4 将最后 0x40 个字节与前 0x40 个字节进行异或运算
      for ( i=0; i<0x40; i++ ) {
            n[0x40 + i] = (byte)(n[0x40 + i] ^ n[i]);
      };

      // 步骤 3 将字节 0x0d-0x10 与字节 0x34-0x38 进行异或运算
      for ( i=0; i<4; i++ ) {
            n[0x0d + i] = (byte)(n[0x0d + i] ^ n[0x34 + i]);
      };

      // 步骤 2 将前 0x40 个字节与后 0x40 个字节进行异或运算
      for ( i=0; i<0x40; i++ ) {
            n[i] = (byte)(n[i] ^ n[0x40 + i]);
      };

      for ( i=0; i<4; i++ ) {
            byte temp = n[0x00 + i];
            n[0x00 + i] = n[0x4d + i];
            n[0x4d + i] = temp;
      };
};


   还有一些服务器使用旧的授权协议(版本785a),该协议不会加密Init数据包,其余的则由 Blowfish 加密。
使用 21 字节的密钥。LoginRequest数据包仅使用 Blowfish 算法加密,没有额外的RSA加密。
   XOR 算法用于加密游戏服务器数据包。XOR 密钥是随机生成的,并通过CryptInit数据包发送给客户端。
加密和解密过程如下:
 
/* 解码数据 */ 
void decrypt( unsigned char *data, unsigned int len, unsigned char *Key )
{

        int temp = 0;

        for ( unsigned int i = 0; i < len; ++i ) {
                int temp2 = data[i] & 0xff;
               data[i] = (temp2 ^ (Key[i & 15] & 0xff) ^ temp);
               temp = temp2;
        };

        

        int old = Key[8] & 0xff;
        old |= (Key[9] << 0x08) & 0xff00;
        old |= (Key[10] << 0x10) & 0xff0000;
        old |= (Key[11] << 0x18) & 0xff000000;

        old += len;

        Key[8] = old &0xff;
        Key[9] = (old >> 0x08) & 0xff;
        Key[10] = (old >> 0x10) & 0xff;
        Key[11] = (old >> 0x18) & 0xff;
};

/* 对数据进行编码 */ 
void encrypt( unsigned char *data, unsigned int len, unsigned char *Key )
{
        int temp = 0;

        for ( unsigned int i = 0; i < len; i++) {
               int temp2 = data[i] & 0xff;
               data[i] = (temp2 ^ (Key[i & 15] & 0xff) ^ temp);
               temp = data[i];
        };

        int old = Key[8] & 0xff;
        old |= (Key[9] << 0x08) & 0xff00;
        old |= (Key[10] << 0x10) & 0xff0000;
        old |= (Key[11] << 0x18) & 0xff000000;

        old += len;

        Key[8] = old &0xff;
        Key[9] = (old >> 0x08) & 0xff;
        Key[10] = (old >> 0x10) & 0xff;
        Key[11] = (old >> 0x18) & 0xff;
};


   每次编码/解码数据包时,密钥都会根据数据包的长度而变化,因此必须使用两个独立的密钥副本——一个用于编码/解码数据包。
对传出数据包进行加密,对传入数据包进行解密。
   所有数据包均从第 3 个字节开始加密,即数据包大小永远不会被加密。

登录服务器上的授权程序


首先,我想指出目前有两种协议修订版正在使用(可能还有更多,但我不知道)—— c621785a
区别在于c621使用了额外的加密和GameGuard授权。初始化数据包请求身份验证登录数据包也不同。版本可以通过初始化数据包
的大小来确定;对于修订版785a,它是 11 字节,对于c621 – 170。

1. 连接建立后,服务器立即向客户端发送Init 数据包。2 
. 作为响应,客户端发送RequestGGAuth 数据包(在协议修订版785a 中,不发送此数据包)。
3. 服务器以GGAuth数据包进行响应(在协议修订版785a中,不会发送此数据包)
4. 如果服务器响应授权成功,客户端将发送包含登录名和密码的RequestAuthLogin数据包。
5. 检查登录名和密码,如果失败,服务器会发送一个包含失败原因的LoginFail数据包,然后发送一个包含登录成功的LoginOk数据包。
会话密钥 #1。6. 接下来,客户端使用RequestServerList数据包
请求服务器列表
。7. 服务器收到此数据包后,会向客户端发送ServerList 数据包,其中包含服务器列表及其 IP 地址和端口号。
8. 选择游戏服务器并单击“确定”后,客户端会发送一个RequestServerLogin数据包。
9. 授权服务器会检查最大玩家数量、服务器可用性等。如果所有检查都通过,它会发送一个数据包。
PlayOk,其中包含会话密钥 #2。此密钥由当前系统时间(以毫秒为单位)、套接字编号和其他一些无意义的信息生成。之后,客户端
断开与登录服务器的连接,并连接到游戏服务器。

游戏服务器上的授权流程


1. 建立连接后,客户端发送一个包含协议版本的ProtocolVersion数据包。
2. 服务器发送一个CryptInit 数据包,其中包含将用于加密所有后续数据包的 XOR 密钥。
3. 客户端向选定的服务器发送一个AuthLogin数据包,其中包含会话密钥 #1、会话密钥 #2 和登录名。如果这些密钥和登录名不匹配,
客户端断开连接时,授权服务器上存储的内容是什么?
4. 服务器发送一个CharList 数据包,其中包含帐户上所有字符的列表。
5. 以下是创建/删除和选择角色的过程。选择角色并按下“开始”按钮后,客户端发送一个CharacterSelected数据包
。6. 客户端发送两个数据包:RequestQuestListRequestExManorList。7 . 服务器发送一个ExSendManorList
数据包。8. 服务器发送一个QuestList 数据
包。9. 客户端发送一个EnterWorld 数据
。10. 服务器发送一个UserInfo 数据包,该数据包也作为下载完成的信号。
11. 我们都参与其中。服务器每 60 秒发送一个NetPingRequest数据包,客户端必须以NetPing数据包作为响应。

   在包裹描述中,您会找到ObjectIDItemID。ItemID物品类型的标识符,例如,Avadon Robe 的 ItemID 为 2406。ObjectID……
游戏中物品的唯一标识符。例如,如果两个角色都拥有阿瓦隆长袍,则每件长袍的物品ID都将相同——2406。
如何确保ObjectID 的唯一性。

2. 从客户端到服务器(登录服务器)的数据包

00 - 请求身份验证登录
02 - 请求服务器登录
05 - 请求服务器列表
07 - 请求 GGAuth


请求授权登录

用途:请求登录服务器的授权。
版本 0x785a 的格式
00
XX XX XX XX 00		 // 包含登录名的字符串。长度为 14 字节,以 ASCII 格式存储,而非 Unicode 格式!!! 
XX XX XX XX 00		 // 包含密码的字符串。长度为 16 字节,以 ASCII 格式存储,而非 Unicode 格式!!! 
08			 // 登录名/密码部分的结束标记
00 00 00 00		 // 未使用
00 00 00 00		 // 未使用

版本 0xc621 的格式
00
00 00 00 00 ...		 // 包含登录名和密码的 128 字节数组的开头,使用RSA算法加密
... (字节 94-107)	 // 包含登录名的字符串。它长 14 字节,以 ASCII 格式存储,而非 Unicode!!! 
... (字节 108-124)	 // 包含密码的字符串。它长 16 字节,以 ASCII 格式存储,而非 Unicode!!! 
... 00 00 00 00		 // 未使用。数组结束

注意:有些服务器会将登录名和密码作为数据数组而不是字符串进行检查,也就是说,它们会检查代码字符后面的字节。
0(行尾指示符),因此请确保存储登录名和密码的变量中未使用的字节包含零。



请求服务器登录

用途:请求连接到游戏服务器
格式
02
XX XX XX XX		 // SessionKey1 第一部分
XX XX XX XX		 // SessionKey1 第二部分
XX			 // 服务器编号



请求服务器列表

用途:请求游戏服务器列表
格式
05
XX XX XX XX		 // SessionKey1 第 1 部分
XX XX XX XX		 // SessionKey1 第 2 部分
04 00 00 00		 // xs



请求GGAuth

用途:请求 Game Guard 授权
格式
07
XX XX XX XX		 // 会话 ID 
XX XX XX		 
XX		 //未知
XX XX XX XX		 // 未知
XX XX XX XX		 // 未知



3. 从服务器到客户端的数据包(登录服务器)

00 - 初始化
01 - 登录失败
02 - 账号被踢出
03 - 登录成功
04 - 服务器列表
06 - 播放失败
07 - 播放成功
0B - GGAuth


初始化

目的:向客户端传输会话号和连接号;在 c621 版本中,还会传输 RSA 密钥模数和动态令牌。
(在《插曲》中使用,但也应该适用于更早版本的编年史)
协议修订版 0x785a 的格式
00
XX XX XX XX	 // 会话 ID 
XX XX XX XX	 // 协议版本 0x785a

协议修订版 0xc621 的格式
00
XX XX XX XX	 // 会话 ID 
XX XX XX XX	 // 协议版本 0xc621 
XX XX XX XX ...	 // 公钥的 128 字节,客户端随后使用该公钥加密RequestAuthLogin数据包
29 DD 95 4E      // \ 
77 C3 9C FC      // | 不知道是什么
97 AD B6 20      // | 
07 BD E0 F7      // / 
XX XX XX XX ... // Blowfish 密钥的 16 字节,用于加密所有后续数据包
00
XX XX XX XX	 // 数据包校验和

Interlude 的数据包包含额外的 4 个字节
XX XX XX XX	 // 用于加密数据包的异或密钥


登录失败

用途:报告连接登录服务器失败的尝试
格式
01
XX XX XX XX	 // 失败原因:
		// 0x01 - 系统错误
		// 0x02 - 密码错误
		// 0x03 - 登录名或密码错误
		// 0x04 - 访问被拒绝
		// 0x05 - 账户信息不正确(我不知道,也许是数据库错误)
		// 0x07 - 帐户已被使用
		// 0x09 - 账号被封禁
		// 0x10 - 服务器正在维护
		// 0x12 - 已过期
		// 0x13 - 账户已到期(显然 NCSoft 正在计划或曾经计划引入按小时计费的模式 :)



账号被踢出

目的:通知客户账户已被冻结
格式
02
XX XX XX XX	 // 失败原因:
		// 0x01 - 数据窃取器
		// 0x08 - 一般违规
		// 0x10 - 已过去 7 天(针对试用帐户?)
		// 0x20 - 账号被封禁


登录成功

用途:如果登录名和密码验证成功,
则作为对RequestAuthLogin数据包的确认信息发送。格式
03
XX XX XX XX	 // SessionKey1 第一部分
XX XX XX XX	 // SessionKey1 第二部分
00 00 00 00
00 00 00 00
EA 03 00 00
00 00 00 00
00 00 00 00
02 00 00 00
XX XX XX XX ... // 16 字节数组,用途未知


服务器列表

用途:向客户端发送服务器列表及其状态
格式
04
XX		 // 列表中的服务器数量
00		 // 未使用或已预留

// 下一个代码块将对列表中的每个服务器重复执行
XX		 // 服务器 ID 
XX XX XX XX	 // 游戏服务器 IP 地址
XX XX XX XX	 // 服务器端口
XX		 // 年龄限制
XX		 // PVP 服务器:00 - 否,01 - 是
XX XX		 // 在线玩家人数
XX XX		 // 最大玩家人数
XX		 // 测试服务器:00 - 否,01 - 是
// 重复代码块结束



失败

用途:响应游戏服务器上的授权请求
格式
06
XX XX XX XX	 // 拒绝理由
		// 0x00000003 - 密码与帐户不匹配
		// 0x00000004 - 访问失败。请稍后再试。
		// 0x0000000f - 用户过多



PlayOk

用途:响应游戏服务器上的授权请求
格式
07
XX XX XX XX	 // SessionKey2 第一部分
XX XX XX XX	 // SessionKey2 第二部分



GGAuth

用途:响应 GameGuard 授权请求
格式
0B
XX XX XX XX	 // 答案:
		// 0x0B - 跳过授权



4. 从服务器到客户端的数据包(游戏服务器)

00 - 加密初始化
01 - 移动到位置
04 - 用户信息
0E - 状态更新
13 -角色列表
14 - 身份验证登录失败 19 - 角色创建成功1A - 角色创建失败23 - 角色删除成功24 - 角色删除失败 25 - 操作失败2F - 更改等待类型38 - 传送到位置3E - 更改移动类型7E - 注销成功80 - 任务列表D3 - 网络 Ping 请求AF - 服务器套接字关闭E1 - 坐下FE:1B - 发送庄园列表


CryptInit

用途:向客户端传输加密密钥(异或)
格式
00
01 		 // 未知
XX XX XX XX ...	 // 16 字节数组 - 异或键
01 00 00 00	 // 未知
01 00 00 00	 // 未知



移动到位置

用途:通知客户端角色已移动
格式
01
XX XX XX XX	 // 对象 ID 
XX XX XX XX	 // 目标点 X 
XX XX XX XX	 // 目标点 Y 
XX XX XX XX	 // 目标点 Z 
XX XX XX XX	 // 当前位置 X 
XX XX XX XX	 // 当前位置 Y 
XX XX XX XX	 // 当前位置 Z



用户信息

用途:告知客户端角色的属性
格式
04
XX XX XX XX	   	 // 角色 x 坐标
XX XX XX XX	   	 // 角色 y 坐标
XX XX XX XX	   	 // 角色 z 坐标
XX XX XX XX	   	 // 头部旋转角度
XX XX XX XX	   	 // 角色 ObjectID 
XX XX XX XX 00 00  	 // 角色名称
XX XX XX XX	   	 // 种族 ID 
XX XX XX XX	   	 // 角色性别 0 - 男 1 - 女
XX XX XX XX	   	 // 职业 ID 
XX XX XX XX	   	 // 等级XX XX XX XX // 经验值
XX XX XX	   	 
XX	  	 //力量
XX	   	 
XX XX XX	  	 // 敏捷
XX XX XX XX	   	 // 体质XX 
XX XX XX	   	 // 智力XX XX XX XX // 感知
XX XX XX XX	   	 // 体质
XX XX XX XX	  	 // 最大生命值
XX XX XX XX	   	 // 当前生命值
XX XX XX XX	   	 // 最大魔法值
XX XX XX XX	   	 // 当前魔法值
XX XX XX XX	   	 // 魔法值
XX XX XX XX	   	 // 当前负重
XX XX XX XX	   	 // 最大负重
28 00 00 00	   	 // 未知
XX XX XX XX	   	 // 物品ID 内衣
XX XX XX XX	   	 // 物品ID 后背
XX XX XX XX	  	 // 物品ID 左后背
XX XX XX XX	   	 // 物品ID 项链
XX XX XX XX	  	 // 物品ID 右戒指
XX XX XX XX	   	 // 物品ID 左戒指
XX XX XX XX	   	 // 物品ID 头盔
XX XX XX XX	   	 // 物品ID 右手
XX XX XX XX	   	 // 物品ID 左手
XX XX XX XX	   	 // 物品ID 手套
XX XX XX XX	   	 // 物品ID 主护甲
XX XX XX XX	   	 // 物品ID 护腿
XX XX XX XX	   	 // 物品ID 靴子
XX XX XX XX	   	 // 物品ID 背部
XX XX XX XX	   	 // 物品ID 左手
XX XX XX XX	   	 // 物品ID 头发
XX XX XX XX	   	 // 物品ID 脸部
XX XX XX XX	   	 // 物品ID 内衣
XX XX XX XX	   	 // 物品ID 后部
XX XX XX XX	   	 // 物品ID 左后侧
XX XX XX XX	   	 // 物品ID 项链
XX XX XX XX	   	 // 物品ID 右戒指
XX XX XX XX	   	 // 物品ID 左戒指
XX XX XX XX	   	 // 物品ID 头盔
XX XX XX XX	   	 // 右手物品ID 
XX XX XX XX	   	 // 左手物品ID 
XX XX XX XX	   	 // 手套物品ID 
XX XX XX XX	   	 // 主护甲物品ID 
XX XX XX XX	   	 // 护腿物品ID 
XX XX XX XX	   	 // 靴子物品ID 
XX XX XX XX	   	 // 背部物品ID 
XX XX XX XX	  	 // 左手物品ID右手物品ID 
XX XX XX XX	  	 // 头发物品ID 
XX XX XX XX	 	 // 面部物品ID 
...		 	 // 136个零的数组,用途未知
XX XX XX XX	 	 // 物理攻击力
XX XX XX XX	 	 //物理攻击速度
XX XX XX XX	  	 // 物理防御力
XX XX XX XX	  	 // 闪避率
XX XX XX XX	 	 // 命中率
XX XX XX XX	 	 // 暴击率
XX XX XX XX	  	 // 魔法攻击力
XX XX XX XX	 	 //施法速度
XX XX XX XX	  	 // 攻击速度 (?) 
XX XX XX XX	  	 // 魔法防御
XX XX XX XX	 	 // PVP 状态 (0=未标记 1=已标记) 
XX XX XX XX	 	 // 业力
XX XX XX XX	 	 // 奔跑速度
XX XX XX XX	 	 // 行走速度
XX XX XX XX		 // 开启奔跑模式时的游泳速度
XX XX XX XX	 	 // 开启行走模式时的游泳速度
XX XX XX XX	 	 // _flRunSpd 
XX XX XX XX	   	 // _flWalkSpd 
XX XX XX XX	 	 // 开启奔跑模式时的飞行速度
XX XX XX XX	   	 // 开启行走模式时的飞行速度
XX XX XX XX XX XX XX XX // 移动速度 x(浮点数类型) 
XX XX XX XX XX XX XX XX // 攻击速度 x(浮点数类型) 
XX XX XX XX XX XX XX XX // 角色半径 - 服务器使用此值来检查与其他对象的碰撞(浮点数类型) 
XX XX XX XX XX XX XX XX // 角色高度 - 服务器使用此值来检查与其他对象的碰撞(浮点数类型) 
XX XX XX XX	   	 // 发型
XX XX XX XX	   	 // 发色XX XX XX XX // 脸型
XX	   	 
XX XX XX	   	 // 权限等级(0 - 普通角色,1 及以上 - GM) 
XX XX XX XX 00 00  	 // 角色称号字符串
XX XX XX XX	   	 // 公会 ID 
XX XX XX XX	   	 // 公会徽章 ID 
XX XX XX XX	   	 // 联盟 ID 
XX XX XX XX	   	 // 联盟徽章 ID 
XX XX XX XX	   	//攻城旗帜
XX XX XX XX	   	 // 0=否 1=骑乘者 2=骑乘飞龙
XX XX XX XX	   	 //商店类型(私人商店类型) 
XX XX XX XX	   	 //角色是否可以制作物品?(0=否,1=是) 
XX XX XX XX	   	 //PK数量
XX XX XX XX	   	 //PVP数量
XX XX			 //已制作方块数量

// 此代码块重复次数取决于立方体的数量
XX XX			 // 立方体 ID 
// 重复代码块结束

XX			 // 1-寻找队友? 
XX XX XX XX	   	 // 角色状态标记已设置(异常效果) 
00			 // 
XX XX XX XX	   	 // 氏族特权
XX XX			 // 剩余推荐次数
XX XX			 // 角色推荐点数
00 00 00 00		 // 
XX XX XX XX		 // 背包容量(最大物品数量) 
XX XX XX XX		 // 角色职业 ID 
XX XX XX XX		 // 玩家周围的效果
XX XX XX XX		 // 最大 CP 值
XX XX XX XX		 // CP 值
XX			 // 强化等级
XX			 // 玩家周围的队伍指示圈(0=无,1=蓝色,1=红色) 
XX XX XX XX		 // 大型氏族图标 ID(用于氏族盾牌) 
XX			 // 贵族? 
XX			 // 英雄? 
XX			 // 钓鱼? 
XX XX XX XX		 // 鱼 x 
XX XX XX XX		 // 鱼 y 
XX XX XX XX		 // 鱼 z 
XX XX XX XX		 // 名称颜色(RGB 格式,0x00 RR GG BB,其中R为红色级别,G为绿色,B为蓝色) 
XX			 // 是否启用运行? 
XX XX XX XX		 // 氏族等级
00 00 00 00		 // 
XX XX XX XX		 // 标题颜色(RGB 格式,0x00 RR GG BB,其中R为红色级别,G为绿色,B为蓝色) 
XX XX XX XX		 // 诅咒武器等级




状态更新

用途:通知客户端对象状态的更改
格式
0E
XX XX XX XX	 // 属性值已更改的对象的 ID 
XX XX XX XX	 // 列表中的属性值数量

// 下一个代码块重复执行的次数与列表
XX XX XX XX	中的统计数据数量相同// 统计数据标识符,可以取以下值:
		// 0x00000001 - 级别
		// 0x00000002 - Exp
		// 0x00000003 - STR
		// 0x00000004 - DEX
		// 0x00000005 - CON
		// 0x00000006 - INT
		// 0x00000007 - WIT
		// 0x00000008 - 男士
		// 0x00000009 - 当前 HP
		// 0x0000000a - 最大HP
		// 0x0000000b - 当前 MP
		// 0x0000000c - 最大 MP
		// 0x0000000d - SP
		// 0x0000000e - 当前权重级别
		// 0x0000000f - 最大携带重量
		// 0x00000010 - ?
		// 0x00000011 - PAtk
		// 0x00000012 - Patk 速度
		// 0x00000013 - PDef
		// 0x00000014 - 规避
		// 0x00000015 - 精度
		// 0x00000016 - 严重错误
		// 0x00000017 - MAtk
		// 0x00000018 - 施法速度
		// 0x00000019 - MDef
		// 0x0000001a - PVP标志
		// 0x0000001b - 业力
		// 0x00000021 - 当前控制点
		// 0x00000022 - 最大 CP 
XX XX XX XX	 // 新的属性值
// 重复块结束


注意:客户端要更新统计数据,至少需要发送 2 个参数(已在 Interlude 客户端上测试)。



身份验证登录失败

目的:通知客户端游戏服务器已拒绝连接请求。
格式
14		 // 和/或 12 ??? 
XX XX XX XX	 // 原因:
		// 0x00 - 无文本
		// 0x01 - 系统错误
		// 0x02 - 密码与账号不匹配(这跟游戏服务器有什么关系???它甚至都没把密码发给游戏服务器哦)
		// 0x03 - 密码与账户不匹配(又是25,韩国人,真够呛)
		// 0x04 - 访问尝试失败,请稍后再试。
		// 0x05 - 账户无效,请联系客服
		// 0x06 - 访问尝试失败,请稍后重试。(同一个错误似乎对应太多代码了。)
		// 0x07 - 帐户已被使用(登录服务器也应该检查这一点)
		// 0x08 - 访问尝试失败,请稍后再试。
		// 0x09 - 访问尝试失败,请稍后再试。
		// 0x10 - 访问尝试失败,请稍后重试。



字符列表

用途:包含账号上所有饰品的列表
格式
13
XX XX XX XX		 // 账号上的饰品数量

			// <<<<< 下一个代码块将重复执行,重复次数与账户中的字符数相同。 
XX XX XX XX 00 00	 // 角色昵称字符串
XX XX XX XX		 // 角色 ID 
XX XX XX XX 00 00	 // 登录名字符串
XX XX XX XX		 // 角色 ID 
XX XX XX XX		 // 会话 ID 
XX XX XX XX		 // 公会 ID 
00 00 00 00		 // 未知
XX XX XX XX		 // 性别(0x00 - 男,0x01 - 女) 
XX XX XX XX		 // 种族
XX XX XX XX		 // 职业
XX XX XX XX		 // 是否激活(?) 
XX XX XX XX		 // X - 未使用
XX XX XX XX		 // Y - 未使用
XX XX XX XX		 // Z - 未使用
XX XX XX XX XX XX XX XX	 // 当前生命值(数值以双精度浮点数存储) 
XX XX XX XX XX XX XX XX	 // 当前魔法值(数字以双精度浮点数格式存储) 
XX XX XX XX		 // SP 
XX XX XX XX XX XX XX XX	 // EXP(类型 __int64) 
XX XX XX XX		 // 等级
XX XX XX XX		 // 业力
XX XX XX XX ...		 // 36 个零的数组,用途未知
XX XX XX XX		 // 物品ID 下部
XX XX XX XX		 // 物品ID 后部
XX XX XX XX		 // 物品ID 左耳
XX XX XX XX		 // 物品ID 颈部
XX XX XX XX		 // 物品ID 右手指
XX XX XX XX		 // 物品ID 左手指
XX XX XX XX		 // 物品ID 头部
XX XX XX XX		 // 物品ID 右手
XX XX XX XX		 // 物品ID 左手
XX XX XX XX		 // 物品ID 手套
XX XX XX XX		 // 物品对象ID 胸部
XX XX XX XX		 // 物品对象ID 腿部
XX XX XX XX		 // 物品对象ID脚部
XX XX XX		 
XX		 // 物品对象ID 背部
XX XX XX		 XX // 物品对象ID 左手XX XX 
XX XX		 // 物品对象ID头发
XX XX XX XX		 // 物品对象ID 下身 XX XX XX XX // 物品对象ID 后背
XX XX XX		 XX // 物品对象ID 左耳
XX XX XX XX		 //物品对象ID颈部 XX 
XX XX XX		 // 物品对象ID 右手指
XX XX XX		 
XX		 // 物品对象ID 左手指
XX XX XX		 XX // 物品对象ID 头部XX XX XX XX // 物品对象ID 右手
XX XX XX XX		 // 物品对象ID 左手
XX XX XX XX		 // 物品对象ID 手套
XX XX XX XX		 // 物品对象ID 胸部
XX XX XX XX		// 腿部物品ID 
XX XX XX XX		 // 脚部物品ID 
XX XX XX XX		 // 背部物品ID 
XX XX XX XX		 // 左手物品ID 
XX XX XX XX		 // 头发物品ID 
XX XX XX XX		 // 发型
XX XX XX XX		 // 发色
XX XX XX XX		 // 脸型
XX XX XX XX XX XX XX XX XX	 // 最大生命值(数值以双精度浮点数存储) 
XX XX XX XX XX XX XX XX	 // 最大魔法值(数值以双精度浮点数存储) 
XX XX XX XX		 // 角色删除前的剩余时间(秒)。如果为 0,则表示该角色未设置为删除
XX XX XX XX		 // 职业 ID(基础?) 
XX XX XX XX		 // 客户端用于确定上次登录的角色,该角色为 1,其余角色为 0 
XX			 // 枪械磨砺等级
XX XX XX XX		 // 强化 ID



字符创建成功

目的:通知客户端角色创建已成功完成
格式
19
01



角色创建失败

用途:通知客户端创建角色尝试失败。
格式
1A
XX XX XX XX	 // 原因:
		创建失败
		账号上的饰品太多了
		// 角色名称已存在
		// 名称过长或包含非法字符



字符删除成功

目的:通知客户端角色删除已成功
格式
23



字符删除失败

目的:通知客户端字符删除失败
格式
24



操作失败

目的:通知客户端其最新请求无法满足
格式
25



更改等待类型

用途:通知客户端角色已更改等待类型(我不知道如何最好地将其翻译成俄语 :-/ 简而言之,参数清楚地说明了它的含义)
格式
2F
XX XX XX XX	 // 角色 ID 
XX XX XX XX	 // 等待类型:
		// 00 - 坐
		// 01 - 站立
		// 02 - 假死
		// 03 - 取消假死
XX XX XX XX	 // X 
XX XX XX XX	 // Y 
XX XX XX XX	 // Z



传送至位置

目的:通知客户端角色已传送。

格式
38
XX XX XX XX	 // 字符 ID 
XX XX XX XX	 // X 
XX XX XX XX	 // Y 
XX XX XX XX	 // Z



更改移动类型

目的:通知客户端角色已更改移动类型
格式
3E
XX XX XX XX	 // 角色 ID 
XX XX XX XX	 // 00 - 行走,01 - 奔跑
00 00 00 00	 // C2



注销成功

目的:通知客户端已授予其退出游戏的权限。作为对客户端注销数据包
的响应。格式
7E


任务列表

目的:向客户列出任务和任务物品
格式
80
XX XX		 // 任务数量

// 此代码块重复执行,重复次数与角色拥有的任务数量相同
XX XX XX XX	 // 任务 ID 
00 00 00 00	 // 任务执行阶段编号
// 重复代码块结束

XX XX		 // 任务物品数量

// 此代码块重复执行的次数与角色拥有的任务物品数量相同
XX XX XX XX	 // 物品的 ItemID 
XX XX XX XX	 // 物品的 ObjectID 
XX XX XX XX	 // 此类物品的数量
05 00 00 00	 // 未知
// 重复代码块结束



服务器套接字关闭

目的:通知客户端服务器正在关闭连接
格式
空军
00 00 00 00	 //



NetPing请求

目的:向客户端发送 Ping 数据包。大约每分钟发送一次,如果客户端未响应此数据包,则客户端将通过NetPing数据包断开连接。
格式
D3
XX XX XX XX	 // Ping ID。似乎是随机生成的。


椅子坐

目的:告知客户端角色已坐下
格式
E1
XX XX XX XX	 // 对象 ID 
XX XX XX XX	 // 静态对象 ID



ExSendManorList

目的:告知客户庄园区域
信息 格式
FE
1B 00
XX XX XX XX	 // 庄园区域数量

// 下一个代码块重复的次数与庄园区域的数量相同
XX XX XX XX		 // 庄园区域 ID 
XX XX XX XX 00 00	 // 包含庄园区域名称的字符串
// 重复代码块结束



5. 从客户端到服务器(游戏服务器)的数据包

00 - 协议版本
01 - 向后移动到位置
02 - 说
03 - 进入世界
04 - 动作
08 - 身份验证请求
09 - 注销
0A - 攻击请求
0B
- 创建角色 0C - 删除角色
0D - 选择角色
0F - 请求物品列表
11 - 请求卸下物品
12 -请求丢弃物品
14 - 使用物品
15 - 交易请求
16 - 添加交易物品
17
- 交易完成
1B
- 请求社交动作
1C - 更改移动类型// 已弃用。现在使用“请求动作使用”
1D - 更改等待类型// 已弃用。现在使用“ RequestActionUse
1E - 请求出售物品
1F - 请求购买物品
21 -请求绕过服务器
24 - 请求加入誓约
25
-请求回复加入誓约
26
- 请求提取誓约
27 -请求驱逐誓约成员
29 - 请求
加入队伍
2A - 请求
回复加入队伍
2B - 请求
提取队伍
2C - 请求驱逐队伍成员
2F - 请求使用魔法技能
30 - 出现
33 -
请求注册快捷键
35
- 请求删除快捷键
37 - 请求取消目标
38 - 说2
3C - 请求誓约成员列表
3F - 请求技能列表
40 - 回复交易请求
45 - 请求使用操作
46 - 请求重启
48 - 验证位置
4A - 开始旋转
4B -完成旋转
4D - 请求开始誓约战争
4F - 请求
停止誓约战争
55 - 请求给予昵称
58 - 请求附魔物品
59 -请求销毁物品
5E - 请求邀请好友
5F - 请求回复好友邀请
60 - 请求好友列表
61 - 请求删除
好友
62 - 角色恢复
63 - 请求任务列表
64 - 请求中止任务
66 - 请求誓约信息
68 - 请求誓约徽章
6A - 请求
骑乘
6B - 请求获取技能信息
6C - 请求获取技能
6D - 请求重置点
6E - 请求GM命令
6F -请求组队匹配配置
70 - 请求组队匹配列表
71 - 请求组队
匹配详情
72 - 请求物品
结晶
77 - 设置私人商店出售信息
81 - 请求GM列表
82 - 请求加入盟友
83 - 请求加入盟友
84 - 盟友离开
85 - 盟友解散
88 - 请求盟友徽章
89 - 请求更改宠物名称
8A - 请求宠物使用物品
8B - 请求给予宠物物品
8C - 请求从宠物身上获取物品
8E - 请求盟友信息
8F - 请求获取宠物物品
94 - 设置私人商店消息购买 98 - 请求开始联盟战争
9A - 请求停止联盟
战争
A0
- 请求封锁
A2
- 请求攻城攻击者列表
A4 - 请求加入攻城

A8 - 网络 Ping
AC - 请求打开配方书 B9 - 请求评估 BA - 请求指甲花列表 BB - 请求指甲花物品信息 BC - 请求指甲花装备
C1
- 请求创建宏
C2 - 请求删除宏
CF -请求自动灵魂射击 D0:06 - 请求旧附魔技能信息 D0:07 - 请求旧附魔技能 D0:08 - 请求旧庄园列表 D0:10 - 请求旧誓约纹章(大型)
D0:11 - 请求旧誓约纹章(大型)
EE - 请求更改队伍领袖


协议版本

目的:向服务器传递客户端使用的协议版本
格式
00
XX XX XX XX		 // 协议版本



向后移动到位置

目的:请求移动角色
格式
01
XX XX XX XX		 // 目标点的 X 坐标
XX XX XX XX		 // 目标点的 Y 坐标
XX XX XX XX		 // 目标点的 Z 坐标
XX XX XX XX		 // 角色当前位置的 X 坐标
XX XX XX XX		 // 角色当前位置的 Y 坐标
XX XX XX XX		 // 角色当前位置的 Z 坐标
XX XX XX XX		 // 00 - 使用键盘移动,01 - 使用鼠标移动



用途:向其他玩家发送消息
格式
02
XX XX XX XX 00 00	 // 消息字符串
XX XX XX XX		 // 消息类型
			// 0x00 - 全部
			// 0x01 - 喊叫(!)
			// 0x02 - TELL ( " )
			// 0x03 - 派对 ( # )
			// 0x04 - CLAN ( @ )
			// 0x05 - GM
			// 0x06 - 请愿玩家
			// 0x07 - PETITION_GM
			// 0x08 - 交易 ( + )
			// 0x09 - 联盟($)
			// 0x0A - 公告
			// 0x0F - PARTYROOM_ALL(黄色)
			// 0x10 - PARTYROOM_COMMANDER(蓝色)
			// 0x11 - 英雄的声音
XX XX XX XX 00 00	 // 用于私信。包含消息接收者的角色昵称。



EnterWorld

用途:客户端完成世界加载后发送的数据包
格式
03



行动

用途:客户端点击NPC或其他角色时发送的数据包
。格式

04
XX XX XX XX		 // 对象 ID 
XX XX XX XX		 // 角色 X 坐标
XX XX XX XX		 // 角色 Y 坐标
XX XX XX XX		 // 角色 Z 坐标
XX			 // 00 - 单击,01 - 按住 Shift 键单击



身份验证请求

用途:游戏服务器上的授权请求
格式
08
XX XX XX XX		 // SessionKey2 第 2 部分(由服务器登录提供) 
XX XX XX XX		 // SessionKey2 第 1 部分(由服务器登录提供) 
XX XX XX XX		 // SessionKey1 第 2 部分(由服务器登录提供) 
XX XX XX XX		 // SessionKey1 第 1 部分(由服务器登录提供)



注销

目的:请求服务器允许离开游戏
格式
09



攻击请求

目的:攻击请求
格式
0A
XX XX XX XX		 // 要攻击的角色 ID 
XX XX XX XX		 // 角色位置的 X 坐标XX 
XX XX XX		 // 角色位置的 Y 坐标
XX XX XX XX		 // 角色位置的 Z 坐标
XX XX XX XX		 // 0 - 未按下 Ctrl 键,1 - 已按下 Ctrl 键



创建角色

目的:请求创建角色
格式
0B
XX XX XX XX 00 00	 // 角色名称行
XX XX XX XX		 // 种族
XX XX XX XX		 // 性别
XX XX XX XX		 // 职业
XX XX XX XX		 // 智力
XX XX XX XX		 // 力量XX XX 
XX XX		 //体质
XX		 XX XX XX // 男性
XX XX XX XX		 // 敏捷
XX XX XX XX		 // 智慧
XX XX XX XX		 // 发型
XX XX XX XX		 // 发色
XX XX XX XX		 // 脸型



角色删除

用途:设置要删除的字符
格式
0摄氏度
XX XX XX XX		 // 带字符的插槽编号



已选择角色

用途:选择角色。在角色选择菜单中点击角色时发送。
格式
0D
XX XX XX XX		 // 带字符的插槽编号



请求项列表

用途:请求库存物品列表。(服务器发送此列表后,客户端将打开库存。)
格式
0华氏度



请求卸下物品

用途:移除角色身上的装备
格式
11
XX XX XX XX		 // 插槽编号



请求丢弃项

用途:物品丢弃请求。由客户端在尝试从物品栏丢弃物品时发送。
格式
12
XX XX XX XX		 // 要丢弃物品的 ID 
XX XX XX XX		 // 要丢弃的物品数量 XX XX XX XX // 丢弃物品位置的 X 坐标
XX XX XX XX		 
//		丢弃物品位置的 Y 坐标
XX XX XX XX		 // 丢弃物品位置的 Z 坐标



使用项

用途:申请使用某项物品
格式
14
XX XX XX XX		 // 对象 ID



交易请求

目的:交易请求。
格式
15
XX XX XX XX		 // 我们想要交易的对象的 ID



添加交易物品

用途:向交易列表添加物品。
格式
16
XX XX XX XX		 // 交易 ID 
XX XX XX XX		 // 物品 ID 
XX XX XX XX		 // 数量



TradeDone

目的:请求平仓。
格式
17
XX XX XX XX		 // 0 - 取消交易,1 - 确认交易



请求社会行动

用途:使笑声等社交动作产生动画效果。
格式
1B
XX XX XX XX		 // 行动编号
			// 0x02 - 问候
			// 0x03 - 胜利
			// 0x04 - 前进
			// 0x05 - 否
			// 0x06 - 是
			// 0x07 - 弓
			// 0x08 - 不知情
			// 0x09 - 社交等待
			// 0x0A - 笑声
			// 0x0B - 鼓掌
			// 0x0C - 舞蹈
			// 0x0D - 悲伤
			// 0x0F - 升级动画
			// 0x10 - 英雄动画



更改移动类型

用途:开启/关闭运行
格式
1C
XX XX XX XX		 // 0 - 关闭,1 - 开启



更改等待类型

用途:坐/站
式 形式
1D
XX XX XX XX		 // 0 - 坐,1 - 站



请求目标已取消

用途:取消目标
格式
1D



请求出售物品

目的:出售物品的请求
格式
1E
XX XX XX XX		 // 购物清单 ID(清单 ID) 
XX XX XX XX		 // 待售商品数量

// <<< 此代码块重复执行的次数与待售商品的种类相同
XX XX XX XX		 // 待售商品的 ObjectID 
XX XX XX XX		 // 待售商品的 ItemID 
XX XX XX XX		 // 待售商品的数量
// 重复代码块结束


请求购买物品

目的:采购申请
格式
1F
XX XX XX XX		 // 购物车 ID 
XX XX XX XX		 // 要购买的商品数量

// <<< 此代码块重复的次数与待购物品的种类相同
XX XX XX XX		 // 待购物品的 ID 
XX XX XX XX		 // 待购物品的数量
...


请求绕过服务器

用途:绕过服务器端,直接向服务器发送命令(包含在 HTML 中)。
格式
21
XX XX XX XX 00 00	 // 包含命令的行



申请加入承诺

用途:向角色发送加入氏族的邀请。
格式
24
XX XX XX XX		 // 向其发送优惠的角色 ID



请求/回答/加入/承诺

目的:回复加入战队的邀请
格式
25
XX XX XX XX		 // 答案:00 - 否,01 - 是



请求提款承诺

目的:离开氏族
格式
26



请求驱逐承诺成员

目的:从氏族中移除角色
格式
27
XX XX XX XX 00 00	 // 包含字符名称的字符串



请求加入派对

目的:邀请参加聚会
形式
29
XX XX XX XX 00 00	 // 接收邀请的角色昵称
XX XX XX XX		 // 物品分配类型:
			// 0x00 - 掉落物归拾取者所有,剧透者获得掉落物
			// 0x01 - 掉落物随机分布,剧透 - 跳转到剧透部分
			// 0x02 - 掉落物和腐烂物,随机分布
			// 0x03 - 掉落物依次分发给角色,剧透者获得掉落物
			// 0x04 - 掉落和破坏,依次给予角色



请求答案加入派对

目的:回复参加聚会的邀请
格式
2A
XX XX XX XX		 // 答案:00 - 否,01 - 是



请求与提取方

目的:离开派对
形式
2B



请求拒绝方成员

目的:将角色从队伍中移除
格式
2C
XX XX XX XX 00 00	 // 要删除的字符名称字符串



请求魔法技能使用

目的:使用魔法技能
格式
2F
XX XX XX XX		 // 技能 ID 
XX XX XX XX		 // CTRL 状态:00 - 松开,01 - 按下
XX XX XX XX		 // SHIFT 状态:00 - 松开,01 - 按下



出现

用途:请求角色死亡后复活。在RequestRestartPointValidatePosition数据包之后调用。
格式
30


请求快捷方式注册表

用途:在快速访问工具栏上注册快捷方式。
格式
33
XX XX XX XX		 // 标签类型
			// 0x01 - 项目
			// 0x02 - 技能
			// 0x03 - 动作
			// 0x04 - 宏
XX XX XX XX		 // 面板上对象的标识符
XX XX XX XX		 // 插槽编号
XX XX XX XX		 // 书签编号
XX XX XX XX		 // 未知



请求快捷方式删除

用途:从快速访问工具栏中移除快捷方式。
格式
35
XX XX XX XX		 // 插槽编号
XX XX XX XX		 // 书签编号


说2

用途:向其他玩家发送消息
格式
38
XX XX XX XX 00 00	 // 消息字符串
XX XX XX XX		 // 消息类型
			// 0x00 - 全部
			// 0x01 - 喊叫(!)
			// 0x02 - TELL ( " )
			// 0x03 - 派对 ( # )
			// 0x04 - CLAN ( @ )
			// 0x05 - GM
			// 0x06 - 请愿玩家
			// 0x07 - PETITION_GM
			// 0x08 - 交易 ( + )
			// 0x09 - 联盟($)
			// 0x0A - 公告
			// 0x0F - PARTYROOM_ALL(黄色)
			// 0x10 - PARTYROOM_COMMANDER(蓝色)
			// 0x11 - 英雄的声音
XX XX XX XX 00 00	 // 用于私信。包含消息接收者的角色昵称。



请求承诺成员名单

目的:请求氏族成员列表
格式
3C



请求技能列表

目的:请求提供已掌握技能列表
格式
3F



答对交易请求

目的:回应贸易
格式
40
XX XX XX XX		 // 交易响应:00 - 拒绝,01 - 确认



请求操作使用

用途:执行操作 
格式
45
XX XX XX XX		 // 操作 ID(列表不完整,操作很多)
			// 0x00 - 坐/站
			// 0x01 - 行走/奔跑
			// 0x19 - 合奏宠物
			// 0x33 - 一般制造
			// 0x38 - 登上/下乘员机(virna ???) 
XX XX XX XX		 // 00 - 未按下 CTRL 键,01 - 已按下 CTRL 键
XX			 // 01 - 未按下 SHIFT 键,01 - 已按下 SHIFT 键



请求重启

用途:返回角色选择菜单
格式
46



验证位置

用途:重置数据、NPC、其他玩家等。实际上,它会将玩家传送到当前坐标。
格式
48
XX XX XX XX		 // X 
XX XX XX XX		 // Y 
XX XX XX XX		 // Z 
XX XX XX XX		 // 视角方向
XX XX XX XX		 // ???



开始旋转

用途:使角色能够绕其轴线旋转
。格式
4A
XX XX XX XX		 // 角度(取值范围为 0 到 65535) 
XX XX XX XX		 // 侧向(01 00 00 00 - 向右旋转,FF FF FF FF - 向左旋转)



完成旋转

用途:防止字符绕其轴线旋转
格式
4B
XX XX XX XX		 // 未知
XX XX XX XX		 // 未知



请求开始誓约战争



目的:发起部落战
形式
4D
XX XX XX XX 00 00	 // 向其宣战的氏族名称字符串


请求开始誓约战争



目的:结束部落战
形式
4F
XX XX XX XX 00 00	 // 包含氏族名称的字符串


请求昵称



用途:设置标题。
格式
55
XX XX XX XX 00 00	 // 包含需要设置称号的角色昵称的字符串
XX XX XX XX 00 00	 // 包含称号的字符串


请求附魔物品



用途:请求一个 Enchat 话题。
格式
58
XX XX XX XX		 // 我们要完成的项目的 ID


请求销毁物品



目的:请求销毁物品
格式
59
XX XX XX XX		 // 商品编号
XX XX XX XX		 // 商品数量?


请求好友邀请



用途:将角色添加到您的好友列表
格式
5E
XX XX XX XX 00 00	 // 要添加的角色名称字符串


请求答案好友邀请



目的:回复好友请求
格式
5F
XX XX XX XX		 // 00 - 否,01 - 是


请求好友列表



用途:好友列表请求
格式
60


请求好友删除



目的:请求从好友列表中删除某个角色
格式
61
XX XX XX XX 00 00 	 // 要删除的字符名称字符串


角色恢复



用途:取消删除字符
格式
62
XX XX XX XX		 // 带字符的插槽编号


RequestQuestList



目的:请求任务列表
格式
63


请求任务中止



目的:打断任务
格式
64
XX XX XX XX		 // 任务 ID


角色恢复



目的:请求有关氏族的信息
格式
66
XX XX XX XX		 // 氏族 ID


请求誓言徽章



用途:设置氏族图标
格式
68
XX XX XX XX		 // 图标 ID


请求乘车



用途:攀爬/下马车/维恩车
格式
6A
XX XX XX XX		 // 0 - 下车,1 - 上车
XX XX XX XX		 // 1 - 步行者,2 - 活体动物


请求获取技能信息



目的:请求有关技能的信息
格式
6B
XX XX XX XX		 // 技能 ID 
XX XX XX XX		 // 技能等级


请求获取技能



目的:请求学习某项技能
格式
6C
XX XX XX XX		 // 技能 ID 
XX XX XX XX		 // 技能等级


请求重启点



目的:请求角色死亡后重新开始游戏
格式
6D
XX XX XX XX		 // 玩家将被返回到的点
			// 0x00 - 城市
			// 0x01 - 氏族大厅
			// 0x02 - 城堡
			// 0x03 - 旗帜(城堡围攻期间)
			// 0x04 - 玩家死亡地点的资源,用于节日活动


请求GM命令



用途:向GM命令发送请求
格式
6E
XX XX XX XX 00 00	 // 包含目标字符名称的字符串
XX XX XX XX		 // 命令标识符
			// 0x01 - 玩家状态
			// 0x02 - 玩家氏族
			// 0x03 - 玩家技能
			// 0x04 - 玩家任务
			// 0x05 - 玩家物品栏
			// 0x06 - 玩家仓库
XX XX XX XX		 // 未知


请求方匹配配置



用途:打开政党搜索窗口
格式
6F
XX XX XX XX		 // 自动注册:00 - 否,01 - 是
XX XX XX XX		 // 显示级别:00 - 否,01 - 是
XX XX XX XX		 // 显示类别:00 - 否,01 - 是


请求方匹配列表



目的:请求提供寻找队伍的角色名单
格式
70
XX XX XX XX		 // 状态可以是 1 和 3。“肯定”是什么意思,我不知道。


请求方匹配详情



目的:请求有关正在寻找队伍的角色的详细信息
格式
71
XX XX XX XX		 // 字符 ID


请求结晶项



目的:申请结晶化
格式
72
XX XX XX XX		 // 待结晶物品的ID 
XX XX XX XX		 // 待结晶物品的数量


设置私店消息出售



用途:设置 PrivateStore 的销售信息
格式
77
XX XX XX XX 00 00	 // 包含消息的字符串


请求GmList



目的:请求GM名单
格式
81


请求加入盟友



目的:提议加入联盟
形式
82
XX XX XX XX		 // 受邀加入联盟的氏族首领的 ID


请求答案加入盟友



目的:回应加入联盟的邀请
格式
83
XX XX XX XX		 // 答案:00 - 否,01 - 是


盟友离开



目的:退出联盟
形式
84
XX XX XX XX 00 00	 // 包含氏族名称的字符串


盟友解雇



目的:请求解散联盟
格式
85
XX XX XX XX 00 00	 // 包含氏族名称的字符串


RequestAllyCrest



用途:请求安装联盟图标
格式
88
XX XX XX XX		 // 图标 ID


请求更改宠物名称



用途:更改宠物名称
格式
89
XX XX XX XX 00 00	 // 包含食物新名称的字符串


请求宠物用品



用途:使用项目的命令
格式
8A
XX XX XX XX		 // 要使用的对象的 ID


请求将物品交给宠物



用途:将物品从你的物品栏移动到深渊的物品栏
。格式
8B
XX XX XX XX		 // 商品编号
XX XX XX XX		 // 数量


从宠物获取物品请求



用途:将物品从深渊的物品栏转移到你自己的物品栏
。格式
8C
XX XX XX XX		 // 商品编号
XX XX XX XX		 // 数量
XX XX XX XX		 // 谁知道呢。大多数情况下是 0


请求盟友信息



目的:请求有关联盟的信息。
格式
8E


RequestPetGetItem



用途:命令皮图捡起物品。
格式
8楼
XX XX XX XX		 // 要提升的 ID


设置私店消息购买



用途:设置 PrivateStore 的购买消息
格式
94
XX XX XX XX 00 00	 // 包含消息的字符串


请求开始联盟战争



目的:宣布 alli var
格式
98
XX XX XX XX 00 00	 // 包含联盟名称的字符串


请求停止联盟战争



目的:请求终止 alli var'a
格式
9A
XX XX XX XX 00 00	 // 包含联盟名称的字符串


请求块



目的:请求对黑名单进行操作
格式
A0
XX XX XX XX		 // 请求类型:
			// 0x00 - 将字符添加到忽略列表
			// 0x01 - 从忽略列表中移除字符
			// 0x02 - 显示已忽略字符列表
			// 0x03 - 忽略所有
			// 0x04 - 取消忽略所有
XX XX XX XX 00 00	 // 需要忽略的字符名称字符串


请求围攻攻击者列表



目的:请求提供已登记参加城堡攻防战的进攻氏族名单。
格式
A2
XX XX XX XX		 // 锁 ID


请求加入围攻



用途:在城堡攻城列表中添加/移除氏族
格式
A4
XX XX XX XX		 // 城堡 ID 
XX XX XX XX		 // 00 - 加入防守方,01 - 加入进攻方
XX XX XX XX		 // 00 - 从列表中移除部落,01 - 将部落添加到列表中


请求食谱打开



用途:打开食谱书
格式
作为


NetPing



用途:响应RequestNetPing服务器数据包
格式
A8
XX XX XX XX		 // 此数字取自服务器发送的RequestNetPing数据包
XX XX XX XX		 // Ping

请求食谱打开



用途:打开食谱书
格式
作为


请求评估



目的:请求推荐球员
格式
B9
XX XX XX XX		 // 目标 ID


请求海娜列表



目的:请求提供可供选择的纹身图案列表
格式
BA
XX XX XX XX		 // 未知


请求海娜物品信息



目的:获取有关纹身的信息
格式
BB
XX XX XX XX		 // 纹身 ID


请求海娜用品



目的:纹身申请
格式
公元前
XX XX XX XX		 // 要纹的图案的ID


请求创建宏



目的:请求创建宏
格式
C1
XX XX XX XX		 // 宏 ID 
XX XX XX XX 00 00	 // 包含宏名称的字符串
XX XX XX XX 00 00	 // 包含宏描述的字符串
XX XX XX XX 00 00	 // 包含图标文本的字符串
XX			 // 图标 ID 
XX			 // 字符串数量

// <<<<< 下一个代码块会重复执行,重复次数与宏中的行数相同。 
XX			 // 行
XX			 // 类型
XX			 // 技能 ID 
XX			 // 面板上的快捷键 ID 
XX XX XX XX 00 00	 // 命令名称
// 重复代码块结束


请求删除宏



目的:请求删除宏
格式
C2
XX XX XX XX		 // 宏 ID


请求自动灵魂射击



用途:启用/禁用 AutoSS
格式
CF
XX XX XX XX		 // 项目标识符
XX XX XX XX		 // 1 - 启用;0 - 禁用


请求ExEnchantSkillInfo



目的:请求有关提升技能的信息
格式
D0
06
00
XX XX XX XX		 // 技能 ID 
XX XX XX XX		 // 技能等级


请求Ex附魔技能



目的:请求技能提升
格式
D0
07
00
XX XX XX XX		 // 技能 ID 
XX XX XX XX		 // 技能等级


请求ExManor列表



目的:请求技能提升
格式
D0
08
00


请求ExPledgeCrestLarge



目的:请求获取氏族大型图标(例如盾牌上的图标)的图像数据。
格式
D0
10
XX XX XX XX		 // 图标 ID


请求ExSetPledgeCrestLarge



用途:将大型氏族图标(例如盾牌上的图标)的图像数据发送到服务器
。格式
D0
11
XX XX XX XX		 // 数据大小

// <<<<< 下一个代码块重复执行的次数与图像数据中的字节数
XX			相同// 图像数据
// 重复代码块结束



请求更换党魁



目的:党内领导权交接
形式
EE
XX XX XX XX 00 00	 // 包含被移交领导权的角色名称的字符串
posted @ 2026-04-24 16:36  SD-KT007  阅读(13)  评论(0)    收藏  举报