74 lines
2.2 KiB
C#
74 lines
2.2 KiB
C#
using PSO2SERVER.Protocol;
|
||
|
||
namespace PSO2SERVER.Models
|
||
{
|
||
// 对象类型枚举
|
||
public enum ObjectType : ushort
|
||
{
|
||
Unknown = 0x0000,
|
||
/// 玩家对象。
|
||
Player = 0x0004,
|
||
/// 区域对象。
|
||
Map = 0x0005,
|
||
/// 大部分的对象和NPC。
|
||
Object = 0x0006,
|
||
/// 一些可破坏的物体(例如一些树木)。
|
||
StaticObject = 0x0007,
|
||
/// 任务对象。11
|
||
Quest = 0x000B,
|
||
/// 队伍对象。13
|
||
Party = 0x000D,
|
||
/// 世界(地图池中的)对象。16
|
||
World = 0x0010,
|
||
/// 非玩家可控的伙伴。22
|
||
APC = 0x0016,
|
||
/// 未定义的类型。
|
||
Undefined = 0xFFFF
|
||
}
|
||
|
||
// 对象头部结构体
|
||
public struct ObjectHeader
|
||
{
|
||
/// 对象的ID。
|
||
public uint ID;
|
||
public uint padding; // 总是有填充
|
||
/// 对象的类型。
|
||
public ObjectType ObjectType;
|
||
/// 对象所在的区域ID。玩家对象没有设置这个字段。
|
||
public ushort MapID;
|
||
|
||
// 只包含ID和类型的构造函数
|
||
public ObjectHeader(uint id, ObjectType type) : this()
|
||
{
|
||
ID = id;
|
||
ObjectType = type;
|
||
}
|
||
|
||
// 包含ID、类型和区域ID的构造函数
|
||
public ObjectHeader(uint id, ObjectType type, ushort mapid) : this()
|
||
{
|
||
ID = id;
|
||
ObjectType = type;
|
||
MapID = mapid;
|
||
}
|
||
|
||
// 从数据流中读取数据并填充到当前结构体
|
||
public void ReadObjectHeaderFromStream(PacketReader reader)
|
||
{
|
||
ID = reader.ReadUInt32(); // 读取对象ID
|
||
padding = reader.ReadUInt32(); // 读取填充部分
|
||
ObjectType = (ObjectType)reader.ReadUInt16(); // 读取对象类型
|
||
MapID = reader.ReadUInt16(); // 读取区域ID
|
||
}
|
||
|
||
// 将当前结构体的数据写入到数据流
|
||
public void WriteObjectHeaderToStream(PacketWriter writer)
|
||
{
|
||
writer.Write(ID); // 写入对象ID
|
||
writer.Write(padding); // 写入填充部分
|
||
writer.Write((ushort)ObjectType); // 写入对象类型
|
||
writer.Write(MapID); // 写入区域ID
|
||
}
|
||
}
|
||
}
|