偏移量(Offset) | 大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
0 | 2 | PacketLength(数据包长度)(字节) | ushort | - |
2 | 1 | PacketType(数据包类型) | byte | 使用TSAPI.PacketTypes.PacketName 枚举值 |
3 | ? | Data(数据内容) | ? | 具体结构参考后续字段定义 |
客户端向服务器发起连接请求
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
? | Version(客户端版本号) | String | "Terraria" + Main.curRelease |
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
int version = binaryReader.ReadString() //客户端版本
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
ConnectRequest | 无 | 无 | 无 | 无 | 无 | 无 |
服务器踢出客户端
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
? | Reason(踢出理由) | NetworkText | - |
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
string kickReasion = NetworkText.Deserialize(binaryReader).ToString(); //踢出理由
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
Disconnect | Reason(踢出理由) | 无 | 无 | 无 | 无 | 无 |
服务器请求客户端将指定玩家角色的完整数据(包括物品栏、装备、银行等所有物品状态)同步到服务器
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | PlayerID(玩家索引) | Byte | - |
1 | ServerWantsToRunCheckBytesInClientLoopThread(服务端是否要在客户端循环线程中运行CheckBytes) | Boolean | NetPlay.Connection.ServerSpecialFlags[2]、RemoteServer.ServerWantsToRunCheckBytesInClientLoopThread |
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
byte index = binaryReader.ReadByte(); //玩家索引
bool serverWantsToRunCheckBytesInClientLoopThread = binaryReader.ReadBoolean(); //服务端是否要在客户端循环线程中运行CheckBytes()
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
ContinueConnecting | 无 | 无 | 无 | 无 | 无 | 无 |
服务器和客户端同步玩家角色信息
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | PlayerID(玩家索引) | Byte | 目标玩家索引 (0-255) |
1 | SkinVariant(人物风格) | Byte | 角色基础外观变体 (0-PlayerVariantID.Max) |
1 | Hair(发型) | Byte | 发型ID (0-164,超出自动重置) |
? | Name(角色名称) | String | 自动Trim()的玩家名称 |
1 | HairDye(染发剂) | Byte | 头发染色类型ID |
2 | AccessoryVisibility(饰品可见性) | UInt16 | 按位控制饰品显示状态 |
1 | HideMisc(杂项隐藏) | Byte | 控制宠物/坐骑等额外显示 |
3 | HairColor(发色) | Color | 红(R)绿(G)蓝(B)值 |
3 | SkinColor(肤色) | Color | - |
3 | EyeColor(眼睛颜色) | Color | - |
3 | ShirtColor(上衣颜色) | Color | - |
3 | UnderShirtColor(内衣颜色) | Color | - |
3 | PantsColor(裤子颜色) | Color | - |
3 | ShoeColor(鞋子颜色) | Color | - |
1 | DifficultyFlags(难度标记) | Byte | BitFlags(位标记): 0=Mediumcore(中核) 1=Hardcore(硬核) 2=ExtraAccessory(额外饰品栏) 3=Creative(旅行模式) |
1 | TorchFlags(火把标记) | Byte | BitFlags(位标记): 0=UsingBiomeTorches(启用火把神的恩宠) 1=HappyFunTorchTime(火把神事件) 2=UnlockedBiomeTorches(解锁火把神的恩宠) 3=UnlockedSuperCart(解锁矿车升级包) 4=EnabledSuperCart(启用矿车升级包) |
1 | ConsumableFlags(消耗品标记) | Byte | BitFlags(位标记): 0=UsedAegisCrystal(活力水晶) 1=UsedAegisFruit(神盾果) 2=UsedArcaneCrystal(奥术水晶) 3=UsedGalaxyPearl(星系珍珠) 4=UsedGummyWorm(黏性蠕虫) 5=UsedAmbrosia(仙馔密酒) 6=AteArtisanBread(工匠面包) |
注
- 所有标记字段均为1字节(8位)长度
- 每个位标记对应一个布尔值状态
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
// 基础玩家信息
byte playerID = binaryReader.ReadByte(); //玩家索引
byte skinVariant = binaryReader.ReadByte(); //人物风格
byte hair = binaryReader.ReadByte(); //发型
string name = binaryReader.ReadString().Trim(); //角色名称
byte hairDye = binaryReader.ReadByte(); //染发剂
// 可见性标记
ushort accessoryVisibility = binaryReader.ReadUInt16(); //饰品可见性
byte hideMisc = binaryReader.ReadByte(); //杂项隐藏
// 颜色信息
Color hairColor = binaryReader.ReadRGB(); //发色
Color skinColor = binaryReader.ReadRGB(); //肤色
Color eyeColor = binaryReader.ReadRGB(); //眼睛颜色
Color shirtColor = binaryReader.ReadRGB(); //上衣颜色
Color underShirtColor = binaryReader.ReadRGB(); //内衣颜色
Color pantsColor = binaryReader.ReadRGB(); //裤子颜色
Color shoeColor = binaryReader.ReadRGB(); //鞋子颜色
// 难度和功能标记
BitsByte difficultyFlags = binaryReader.ReadByte(); //难度标记
byte difficulty = 0; // 0=软核
if (difficultyFlags[0]) difficulty = 1; //中核
if (difficultyFlags[1]) difficulty = 2; //硬核
if (difficultyFlags[3]) difficulty = 3; //旅行
bool extraAccessory = difficultyFlags[2]; //额外饰品栏
// 火把系统标记
BitsByte torchFlags = binaryReader.ReadByte(); //火把标记
bool usingBiomeTorches = torchFlags[0]; //启用火把神的恩宠
bool happyFunTorchTime = torchFlags[1]; //火把神事件
bool unlockedBiomeTorches = torchFlags[2]; //已解锁火把神的恩宠
bool unlockedSuperCart = torchFlags[3]; //解锁矿车升级包
bool enabledSuperCart = torchFlags[4]; //启用矿车升级包
// 消耗品标记
BitsByte consumableFlags = binaryReader.ReadByte(); //消耗品标记
bool usedAegisCrystal = consumableFlags[0]; //使用活力水晶
bool usedAegisFruit = consumableFlags[1]; //使用神盾果
bool usedArcaneCrystal = consumableFlags[2]; //使用奥术水晶
bool usedGalaxyPearl = consumableFlags[3]; //使用星系珍珠
bool usedGummyWorm = consumableFlags[4]; //使用黏性蠕虫
bool usedAmbrosia = consumableFlags[5]; //使用仙馔密酒
bool ateArtisanBread = consumableFlags[6]; //食用工匠面包
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
PlayerInfo | 无 | Index(玩家索引) | 无 | 无 | 无 | 无 |
服务器和客户端同步玩家的库存(包括背包、猪猪储钱罐、保险箱等)的每格物品的信息
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | PlayerID(玩家索引) | Byte | - |
2 | SlotID(格位ID) | Int16 | - |
2 | Stack(数量) | Int16 | - |
1 | Prefix(前缀ID) | Byte | - |
2 | Type(物品ID) | Int16 | - |
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
short index = this.reader.ReadInt16(); //玩家索引
short slot = (int) this.reader.ReadInt16(); //格位ID
byte prefix = (int) this.reader.ReadByte(); //物品前缀
short type = (int) this.reader.ReadInt16(); //物品ID
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
PlayerSlot | 无 | PlayerID(玩家索引) | SlotID(格位ID) | Prefix(前缀ID) | 无 | 无 |
客户端向服务器请求世界信息,此数据包不携带如何数据,仅表示一个信号
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
- | - | - | - |
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
ContinueConnecting2 | 无 | 无 | 无 | 无 | 无 | 无 |
服务器向客户端同步世界信息
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
4 | Time(游戏时间) | Int32 | 当前世界时间(tick数) |
1 | WorldFlags1(世界标记1) | Byte | BitFlags(位标记): 0=IsDayTime(白天) 1=IsBloodMoon(血月) 2=IsEclipse(日食) |
1 | MoonPhase(月相) | Byte | 当前月相 (0-7) |
2 | MaxTilesX(最大宽度) | Int16 | 世界最大X坐标(格数) |
2 | MaxTilesY(最大高度) | Int16 | 世界最大Y坐标(格数) |
2 | SpawnX(出生点X) | Int16 | 世界出生点X坐标 |
2 | SpawnY(出生点Y) | Int16 | 世界出生点Y坐标 |
2 | WorldSurface(地表高度) | Int16 | 地表层高度 |
2 | RockLayer(岩石层高度) | Int16 | 岩石层高度 |
4 | WorldID(世界ID) | Int32 | 世界唯一标识符 |
? | WorldName(世界名称) | String | 世界名称字符串 |
1 | GameMode(游戏模式) | Byte | 0=经典,1=专家,2=大师,3=旅行 |
16 | UniqueID(唯一ID) | Byte[16] | 世界文件唯一标识 |
8 | WorldVersion(世界版本) | UInt64 | 世界生成器版本号 |
1 | MoonType(月亮类型) | Byte | 月亮外观类型 |
1 | TreeBG1(树木背景1) | Byte | 第一类树木背景样式 |
1 | TreeBG2(树木背景2) | Byte | 第二类树木背景样式 |
1 | TreeBG3(树木背景3) | Byte | 第三类树木背景样式 |
1 | TreeBG4(树木背景4) | Byte | 第四类树木背景样式 |
1 | CorruptBG(腐化背景) | Byte | 腐化之地背景样式 |
1 | JungleBG(丛林背景) | Byte | 丛林背景样式 |
1 | SnowBG(雪地背景) | Byte | 雪地背景样式 |
1 | HallowBG(神圣背景) | Byte | 神圣之地背景样式 |
1 | CrimsonBG(猩红背景) | Byte | 猩红之地背景样式 |
1 | DesertBG(沙漠背景) | Byte | 沙漠背景样式 |
1 | OceanBG(海洋背景) | Byte | 海洋背景样式 |
1 | MushroomBG(蘑菇背景) | Byte | 蘑菇地背景样式 |
1 | UnderworldBG(地狱背景) | Byte | 地狱背景样式 |
1 | IceBackStyle(冰雪背景) | Byte | 冰雪背景样式 |
1 | JungleBackStyle(丛林背景) | Byte | 丛林背景样式 |
1 | HellBackStyle(地狱背景) | Byte | 地狱背景样式 |
4 | WindSpeed(风速) | Single | 当前风速 |
1 | CloudCount(云层数量) | Byte | 当前云层数量 |
12 | TreeX(特殊树木X坐标) | Int32[3] | 3棵特殊树木的X坐标 |
4 | TreeStyle(树木样式) | Byte[4] | 4种树木样式 |
12 | CaveBackX(洞穴背景X坐标) | Int32[3] | 洞穴背景X坐标 |
4 | CaveBackStyle(洞穴背景样式) | Byte[4] | 洞穴背景样式 |
13 | TreeTops(树冠样式) | Byte[13] | 13种树冠样式标记 |
4 | MaxRaining(降雨强度) | Single | 当前降雨强度(0.0-1.0) |
1 | WorldFlags2(世界标记2) | Byte | BitFlags(位标记): 0=ShadowOrbSmashed(暗影珠被破坏) 1=DownedEyeOfCthulhu(克苏鲁之眼) 2=DownedEaterOfWorlds(世界吞噬者) 3=DownedSkeletron(骷髅王) 4=HardMode(困难模式) 5=DownedClown(小丑) 6=ServerSideCharacter(服务器角色) 7=DownedPlantera(世纪之花) |
1 | WorldFlags3(世界标记3) | Byte | BitFlags(位标记): 0=DownedMechBoss1(毁灭者) 1=DownedMechBoss2(双子魔眼) 2=DownedMechBoss3(机械骷髅王) 3=DownedAnyMechBoss(任意机械Boss) 4=CloudBGActive(云层背景激活) 5=IsCrimson(猩红世界) 6=IsPumpkinMoon(南瓜月事件) 7=IsSnowMoon(霜月事件) |
1 | WorldFlags4(世界标记4) | Byte | BitFlags(位标记): 1=FastForwardTime(时间加速) 2=IsSlimeRain(史莱姆雨) 3=DownedKingSlime(史莱姆王) 4=DownedQueenBee(蜂后) 5=DownedDukeFishron(猪龙鱼公爵) 6=DownedMartians(火星人入侵) 7=DownedAncientCultist(远古教徒) |
1 | WorldFlags5(世界标记5) | Byte | BitFlags(位标记): 0=DownedMoonLord(月亮领主) 1=DownedPumpking(南瓜王) 2=DownedMourningWood(哀木) 3=DownedIceQueen(冰雪女王) 4=DownedSantank(圣诞坦克) 5=DownedEverscream(常绿尖叫怪) 6=DownedGolem(石巨人) 7=IsBirthdayParty(生日派对) |
1 | WorldFlags6(世界标记6) | Byte | BitFlags(位标记): 0=DownedPirates(海盗入侵) 1=DownedFrostLegion(霜月军团) 2=DownedGoblins(哥布林入侵) 3=IsSandstorm(沙尘暴) 4=IsDD2Event(撒旦军队事件) 5=DownedDD2T1(撒旦军队T1) 6=DownedDD2T2(撒旦军队T2) 7=DownedDD2T3(撒旦军队T3) |
1 | WorldFlags7(世界标记7) | Byte | BitFlags(位标记): 0=CombatBookUsed(战斗手册使用) 1=IsLanternNight(灯笼夜) 2=DownedSolarTower(日耀塔) 3=DownedVortexTower(星璇塔) 4=DownedNebulaTower(星云塔) 5=DownedStardustTower(星尘塔) 6=ForceHalloween(强制万圣节) 7=ForceChristmas(强制圣诞节) |
1 | WorldFlags8(世界标记8) | Byte | BitFlags(位标记): 0=BoughtCat(购买猫) 1=BoughtDog(购买狗) 2=BoughtBunny(购买兔) 3=FreeCake(免费蛋糕) 4=IsDrunkWorld(醉酒世界) 5=DownedEmpressOfLight(光之女皇) 6=DownedQueenSlime(史莱姆皇后) 7=IsGetGoodWorld(终极世界种子) |
1 | WorldFlags9(世界标记9) | Byte | BitFlags(位标记): 0=IsTenthAnniversary(十周年世界) 1=IsDontStarve(饥荒世界) 2=DownedDeerclops(鹿角怪) 3=IsNotTheBees(Not the Bees世界) 4=IsRemixWorld(混搭世界) 5=UnlockedBlueSlime(解锁蓝史莱姆) 6=CombatBookVolumeTwo(战斗手册第二卷) 7=PeddlersSatchel(小贩的背包) |
1 | WorldFlags10(世界标记10) | Byte | BitFlags(位标记): 0=UnlockedGreenSlime(解锁绿史莱姆) 1=UnlockedOldSlime(解锁老史莱姆) 2=UnlockedPurpleSlime(解锁紫史莱姆) 3=UnlockedRainbowSlime(解锁彩虹史莱姆) 4=UnlockedRedSlime(解锁红史莱姆) 5=UnlockedYellowSlime(解锁黄史莱姆) 6=UnlockedCopperSlime(解锁铜史莱姆) 7=FastForwardToDusk(加速至黄昏) |
1 | WorldFlags11(世界标记11) | Byte | BitFlags(位标记): 0=IsNoTrapsWorld(无陷阱世界) 1=IsZenithWorld(天顶世界) 2=UnlockedTruffle(解锁松露人) |
1 | SundialCooldown(日晷冷却) | Byte | 日晷剩余冷却时间 |
1 | MoondialCooldown(月晷冷却) | Byte | 月晷剩余冷却时间 |
2 | CopperTier(铜矿层级) | Int16 | 铜矿替代矿类型 |
2 | IronTier(铁矿层级) | Int16 | 铁矿替代矿类型 |
2 | SilverTier(银矿层级) | Int16 | 银矿替代矿类型 |
2 | GoldTier(金矿层级) | Int16 | 金矿替代矿类型 |
2 | CobaltTier(钴矿层级) | Int16 | 钴矿替代矿类型 |
2 | MythrilTier(秘银层级) | Int16 | 秘银替代矿类型 |
2 | AdamantiteTier(精金层级) | Int16 | 精金替代矿类型 |
1 | InvasionType(入侵类型) | SByte | 当前入侵事件类型 |
8 | LobbyID(大厅ID) | UInt64 | 多人游戏大厅ID |
4 | SandstormSeverity(沙尘暴强度) | Single | 当前沙尘暴强度 |
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
// 基础世界信息
int time = binaryReader.ReadInt32(); // 游戏时间(tick)
BitsByte worldFlags1 = binaryReader.ReadByte(); // 世界标记1
bool isDayTime = worldFlags1[0]; // 是否白天
bool isBloodMoon = worldFlags1[1]; // 是否血月
bool isEclipse = worldFlags1[2]; // 是否日食
byte moonPhase = binaryReader.ReadByte(); // 月相(0-7)
// 世界尺寸
short maxTilesX = binaryReader.ReadInt16(); // 世界最大宽度
short maxTilesY = binaryReader.ReadInt16(); // 世界最大高度
// 出生点坐标
short spawnX = binaryReader.ReadInt16(); // 出生点X
short spawnY = binaryReader.ReadInt16(); // 出生点Y
// 世界层高度
short worldSurface = binaryReader.ReadInt16(); // 地表高度
short rockLayer = binaryReader.ReadInt16(); // 岩石层高度
// 世界标识
int worldID = binaryReader.ReadInt32(); // 世界ID
string worldName = binaryReader.ReadString(); // 世界名称
byte gameMode = binaryReader.ReadByte(); // 游戏模式(0-3)
// 世界唯一标识
Guid worldGuid = new Guid(binaryReader.ReadBytes(16)); // 世界唯一ID
ulong worldVersion = binaryReader.ReadUInt64(); // 世界版本
// 天体信息
byte moonType = binaryReader.ReadByte(); // 月亮类型
// 背景样式
byte[] bgStyles = new byte[13];
for(int i=0; i<13; i++){
bgStyles[i] = binaryReader.ReadByte(); // 13种背景样式
}
// 风速和云层
float windSpeed = binaryReader.ReadSingle(); // 风速
byte cloudCount = binaryReader.ReadByte(); // 云层数量
// 特殊坐标点
int[] treeX = new int[3];
for(int i=0; i<3; i++){
treeX[i] = binaryReader.ReadInt32(); // 特殊树木坐标
}
// 树木样式
byte[] treeStyle = new byte[4];
for(int i=0; i<4; i++){
treeStyle[i] = binaryReader.ReadByte(); // 4种树木样式
}
// 降雨信息
float rainIntensity = binaryReader.ReadSingle(); // 降雨强度
bool isRaining = rainIntensity > 0f; // 是否正在下雨
// 读取所有世界状态标记(共13个字节)
BitsByte[] worldStateFlags = new BitsByte[13];
for(int i=0; i<13; i++){
worldStateFlags[i] = binaryReader.ReadByte();
}
// 其他世界设置
byte sundialCooldown = binaryReader.ReadByte(); // 日晷冷却
byte moondialCooldown = binaryReader.ReadByte(); // 月晷冷却
// 矿石层级
short[] oreTiers = new short[7];
for(int i=0; i<7; i++){
oreTiers[i] = binaryReader.ReadInt16(); // 7种矿石类型
}
// 多人游戏信息
sbyte invasionType = binaryReader.ReadSByte(); // 入侵事件类型
ulong lobbyID = binaryReader.ReadUInt64(); // 大厅ID
float sandstormSeverity = binaryReader.ReadSingle(); // 沙尘暴强度
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
WorldInfo | 无 | 无 | 无 | 无 | 无 | 无 |
玩家加入服务器,客户端向服务器请求区块,服务器会发送玩家生成位置的区块,图鉴信息,旅行模式能力设置,晶塔信息等数据
注
- 无论X,Y的值,服务器一定会发送世界出生点的区块
- 当玩家在服务器中已设置出生点时,服务器还会发送玩家出生点的区块信息
- 当玩家在服务器中没有设置出生点时,X=-1且Y=-1,此时服务器只会发送世界出生点的区块
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
4 | X(玩家出生点TileX坐标) | Int32 | - |
4 | Y(玩家出生点TileY坐标) | Int32 | - |
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
int x = this.reader.ReadInt32(); //玩家出生点TileX坐标
int y = this.reader.ReadInt32(); //玩家出生点TileY坐标
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
TileGetSection | 无 | PlayerSpawnX(玩家出生点TileX坐标) | PlayerSpawnY(玩家出生点TileY坐标) | 无 | 无 | 无 |
主要用于服务器向客户端同步长时间任务的执行进度和状态提示(例如进服时接收区块),也可以用来做计分板
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
4 | StatusMax(总进度) | Int32 | 任务总进度值(如区块同步总数) |
? | StatusText(状态文本) | NetworkText | 显示的状态消息(如"Receiving tile data") |
1 | StatusFlags(状态标记) | Byte | BitFlags(位标记): 0=HidePercent(隐藏百分比) 1=TextShadow(文本阴影) |
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
// 读取进度数据
int statusMax = binaryReader.ReadInt32(); // StatusMax(总进度值)
string statusText = NetworkText.Deserialize(binaryReader).ToString(); // StatusText(状态文本)
// 读取状态标记位
BitsByte statusFlags = binaryReader.ReadByte(); // StatusFlags(状态标记)
bool hidePercent = statusFlags[0]; // 位0: 是否隐藏百分比
bool hasTextShadow = statusFlags[1]; // 位1: 是否显示文本阴影
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
Status | StatusText(状态文本) | StatusMax(总进度) | StatusFlags(状态标记) | 无 | 无 | 无 |
StatusFlags(状态标记) | 位标记状态 ([HidePercent, TextShadow] ) | 说明 |
---|
0 | [false, false] | 显示百分比 + 无阴影 |
1 | [true, false] | 隐藏百分比 + 无阴影 |
2 | [false, true] | 显示百分比 + 有阴影 |
3 | [true, true] | 隐藏百分比 + 有阴影 |
服务器向客户端同步区块数据
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | IsCompressed(是否压缩) | Boolean | 数据是否使用压缩格式 |
4 | XStart(起始TileX坐标) | Int32 | 区块左上角世界TileX坐标 |
4 | YStart(起始TileY坐标) | Int32 | 区块左上角世界TileY坐标 |
2 | Width(宽度) | Int16 | 区块横向格数 |
2 | Height(高度) | Int16 | 区块纵向格数 |
? | Tiles(图格数据) | Byte[] | (压缩)图格数组,每个图格包含: 类型(Type) 样式(Style) 液体(Liquid) 电线(Wire) |
2 | ChestCount(箱子数量) | Int16 | 区块内包含的箱子数 |
? | Chests(箱子数据) | Byte[] | 每个箱子包含: X/Y坐标 物品列表 |
2 | SignCount(标牌数量) | Int16 | 区块内包含的标牌数 |
? | Signs(标牌数据) | Byte[] | 每个标牌包含: X/Y坐标 文本内容 |
2 | TileEntityCount(实体数量) | Int16 | 区块内特殊实体数 |
? | TileEntities(实体数据) | Byte[] | 包含: 逻辑传感器 物品框架 训练假人等 |
不写详细的解包逻辑,想看请反编译NetMessage.DecompressTileBlock
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
NetMessage.DecompressTileBlock(binaryReader.BaseStream); //读取、解压区块数据并且同步到游戏中
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
TileSendSection | 无 | xStart(区块起始TileX坐标) | yStart(区块起始TileY坐标) | width(区块宽度) | height(无区块高度) | 无 |
注
- 泰拉瑞亚的图格坐标起点是地图左上角(0,0)
- 区块由起始位置向右下角延申
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
2 | Start X | Int16 | - |
2 | Start Y | Int16 | - |
2 | End X | Int16 | - |
2 | End Y | Int16 | - |
[ClientGetOnly]
public struct SectionTileFrame
{
public short StartX;
public short StartY;
public short EndX;
public short EndY;
}
NetMessage.SendData(11, -1, -1, null, startX, startY, endX, endY)
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | PlayerID | Byte | - |
2 | Spawn X | Int16 | - |
2 | Spawn Y | Int16 | - |
4 | Respawn Time | Int32 | - |
2 | Number Of Deaths PVE | Int16 | - |
2 | Number Of Deaths PVP | Int16 | - |
1 | Player Spawn Context | Byte | 0 = ReviveFromDeath 1 = SpawningIntoWorld 2 = RecallFromItem |
[ClientGetOnly]
public struct PlayerSpawn
{
public byte PlayerID;
public short SpawnX;
public short SpawnY;
public int RespownTimer;
public short NumberOfDeathsPVE;
public short NumberOfDeathsPVP;
public byte PlayerSpawnContext;
}
NetMessage.SendData(12, -1, -1, null, playerID, playerSpawnContext)
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | PlayerID | Byte | - |
1 | Flag1 | BitsByte | - |
1 | Flag2 | BitsByte | - |
1 | Flag3 | BitsByte | - |
1 | Flag4 | BitsByte | - |
1 | SelectedItem | Byte | - |
8 | Position | Vector2 | - |
8 | Velocity | Vector2 | - |
8 | PotionOfReturnOriginalUsePosition | Vector2 | - |
8 | PotionOfReturnHomePosition | Vector2 | - |
[ServerForward]
public struct PlayerUpdate
{
public byte PlayerID;
public BitsByte Flag1;
public BitsByte Flag2;
public BitsByte Flag3;
public BitsByte Flag4;
public byte SelectedItem;
public Vector2 Position;
public Vector2 Velocity;
public Vector2 PotionOfReturnOriginalUsePosition;
public Vector2 PotionOfReturnHomePosition;
}
NetMessage.SendData(13, -1, -1, null, playerID);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | PlayerID | Byte | - |
1 | Active | Boolean | - |
[ClientGetOnly]
public struct PlayerActive
{
public byte PlayerID;
public byte Active;
}
NetMessage.SendData(14, -1, -1, null, playerID, active);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | PlayerID | Byte | - |
2 | StatLife | Int16 | - |
2 | StatLifeMax | Int16 | - |
[ServerForward]
public struct PlayerHp
{
public byte PlayerID;
public short StatLife;
public short StatLifeMax;
}
NetMessage.SendData(16, -1, -1, null, playerID);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | Action | Byte | - |
2 | TileX | Int16 | - |
2 | TileY | Int16 | - |
2 | Flag1 | Int16 | - |
1 | Flag2 | Byte | - |
[ServerForward]
public struct Tile
{
public byte Action;
public short TileX;
public short TileY;
public short Flag1;
public byte Flag2;
}
NetMessage.SendData(17, -1, -1, null, action, tileX, tileY, flag1, flag2);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | DayTime | Boolean | - |
4 | Time | Int32 | - |
2 | SunModY | Int16 | - |
2 | MoonModY | Int16 | - |
[ClientGetOnly]
public struct TimeSet
{
public bool DayTime;
public int Time;
public short SunModY;
public short MoonModY;
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | Action | Byte | - |
2 | TileX | Int16 | - |
2 | TileY | Int16 | - |
1 | Direction | Byte | - |
[ServerForward]
public struct DoorUse
{
public byte Action;
public short TileX;
public short TileY;
public byte Direction;
}
NetMessage.SendData(19, -1, -1, null, action, tileX, tileY, direction);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
2 | TileX | Int16 | - |
2 | TileY | Int16 | - |
1 | Width | Byte | - |
1 | Height | Byte | - |
1 | TileChangeType | Byte | - |
? | Data | Byte[] | - |
[ServerForward]
public struct TileSendSquare
{
public short TileX;
public short TileY;
public byte Width;
public byte Height;
public byte TileChangeType;
public byte[] Data;
}
NetMessage.SendData(20, -1, -1, null, tileX, tileY, width, height, tileChangeType);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ItemDrop
{
public short ItemID;
public Vector2 Position;
public Vector2 Velocity;
public short Stack;
public byte Prefix;
public byte OwnIgnore;
public short NetID;
}
NetMessage.SendData(21, -1, -1, null, itemID, ownIgnore);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ItemOwner
{
public short NPCID;
public byte PlayerIndex;
}
NetMessage.SendData(22, -1, -1, null, npcID);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcUpdate
{
public short NPCID;
public Vector2 Position;
public Vector2 Velocity;
public ushort Target;
public BitsFlag Flag1;
public BitsFlag Flag2;
public float[] AI;
public short NetID;
public byte PlayerCountForMultiplayerDifficultyOverride;
public float StrengthMultiplier;
public byte LifeSize;
public int Life; //int or short or sbyte
public byte ReleaseOwner;
}
NetMessage.SendData(23, -1, -1, null, npcID);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcItemStrike
{
public short NPCID;
public byte PlayerID;
}
NetMessage.SendData(24, -1, -1, null, npcID, playerID);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ProjectileNew
{
public short Identiry;
public Vector2 Position;
public Vector2 Velocity;
public byte Owner;
public short Type;
public BitsByte Flag1;
public BitsByte Flag2;
public float AI0;
public float AI1;
public ushort BannerIdToRespondTo;
public short Damage;
public float KnockBack;
public short originalDamage;
public short ProjUUID;
public float AI2;
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcStrike
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ProjectileDestroy
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct TogglePvp
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ChestGetContents
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ChestItem
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ChestOpen
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlaceChest
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct EffectHeal
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PasswordRequired
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PasswordSend
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct RemoveItemOwner
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcTalk
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerAnimation
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerMana
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct EffectMana
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerTeam
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SignRead
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SignNew
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct LiquidSet
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerSpawnSelf
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerBuff
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcSpecial
{
}
客户端同步解锁或上锁箱子、解锁丛林门
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
1 | Type(操作类型) | Byte | Value(值): 1 = ChestUnlock(解锁箱子) 2 = DoorUnlock(解锁神庙大门) 3 = ChestLock(给箱子上锁) |
2 | X(目标TileX坐标) | Int16 | - |
2 | Y(目标TileY坐标) | Int16 | - |
using BinaryReader binaryReader = new(new MemoryStream(args.Msg.readBuffer, args.Index, args.Length));
byte lockActionType = binaryReader.ReadByte(); //操作类型:1-解锁箱子,2-解锁门,3-上锁箱子
short tileX = binaryReader.ReadInt16(); //目标的TileX坐标
short tileY = binaryReader.ReadInt16(); //目标的TileY坐标
PacketTypes | Text | number | number2 | number3 | number4 | number5 |
---|
ChestUnlock | 无 | 无 | Type(操作类型) | X(目标TileX坐标) | Y(目标TileY坐标) | 无 |
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcAddBuff
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcUpdateBuff
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerAddBuff
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct UpdateNPCName
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct UpdateGoodEvil
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayHarp
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct HitSwitch
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct UpdateNPCHome
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SpawnBossorInvasion
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerDodge
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PaintTile
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PaintWall
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct Teleport
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerHealOther
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct Placeholder
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ClientUUID
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ChestName
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct CatchNPC
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ReleaseNPC
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct TravellingMerchantInventory
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct TeleportationPotion
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct AnglerQuest
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct CompleteAnglerQuest
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NumberOfAnglerQuestsCompleted
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct CreateTemporaryAnimation
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ReportInvasionProgress
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlaceObject
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SyncPlayerChestIndex
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct CreateCombatText
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct LoadNetModule
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcKillCount
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerStealth
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ForceItemIntoNearestChest
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct UpdateTileEntity
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlaceTileEntity
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct TweakItem
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlaceItemFrame
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct UpdateItemDrop
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct EmoteBubble
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SyncExtraValue
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SocialHandshake
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct Deprecated
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct KillPortal
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerTeleportPortal
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NotifyPlayerNpcKilled
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NotifyPlayerOfEvent
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct UpdateMinionTarget
{
}
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcTeleportPortal
{
}
NetMessage.SendData(100);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct UpdateShieldStrengths
{
}
NetMessage.SendData(101);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NebulaLevelUp
{
}
NetMessage.SendData(102);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct MoonLordCountdown
{
}
NetMessage.SendData(103);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct NpcShopItem
{
}
NetMessage.SendData(104);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct GemLockToggle
{
}
NetMessage.SendData(105);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PoofOfSmoke
{
}
NetMessage.SendData(106);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SmartTextMessage
{
}
NetMessage.SendData(107);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct WiredCannonShot
{
}
NetMessage.SendData(108);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct MassWireOperation
{
}
NetMessage.SendData(109);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct MassWireOperationPay
{
}
NetMessage.SendData(110);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ToggleParty
{
}
NetMessage.SendData(111);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct TreeGrowFX
{
}
NetMessage.SendData(112);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct CrystalInvasionStart
{
}
NetMessage.SendData(113);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct CrystalInvasionWipeAll
{
}
NetMessage.SendData(114);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct MinionAttackTargetUpdate
{
}
NetMessage.SendData(115);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct CrystalInvasionSendWaitTime
{
}
NetMessage.SendData(116);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerHurtV2
{
}
NetMessage.SendData(117);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayerDeathV2
{
}
NetMessage.SendData(118);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct CreateCombatTextExtended
{
}
NetMessage.SendData(119);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
NetMessage.SendData(120);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct TileEntityDisplayDollItemSync
{
}
NetMessage.SendData(121);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct RequestTileEntityInteraction
{
}
NetMessage.SendData(122);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct WeaponsRackTryPlacing
{
}
NetMessage.SendData(123);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct TileEntityHatRackItemSync
{
}
NetMessage.SendData(124);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SyncTilePicking
{
}
NetMessage.SendData(125);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SyncRevengeMarker
{
}
NetMessage.SendData(126);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct RemoveRevengeMarker
{
}
NetMessage.SendData(127);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct LandGolfBallInCup
{
}
NetMessage.SendData(128);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct FinishedConnectingToServer
{
}
NetMessage.SendData(129);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct FishOutNPC
{
}
NetMessage.SendData(130);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct TamperWithNPC
{
}
NetMessage.SendData(131);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct PlayLegacySound
{
}
NetMessage.SendData(132);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct FoodPlatterTryPlacing
{
}
NetMessage.SendData(133);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct UpdatePlayerLuckFactors
{
}
NetMessage.SendData(134);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct DeadPlayer
{
}
NetMessage.SendData(135);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SyncCavernMonsterType
{
}
NetMessage.SendData(136);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct RequestNPCBuffRemoval
{
}
NetMessage.SendData(137);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ClientSyncedInventory
{
}
NetMessage.SendData(138);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SetCountsAsHostForGameplay
{
}
NetMessage.SendData(139);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SetMiscEventValues
{
}
NetMessage.SendData(140);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct RequestLucyPopup
{
}
NetMessage.SendData(141);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SyncProjectileTrackers
{
}
NetMessage.SendData(142);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct CrystalInvasionRequestedToSkipWaitTime
{
}
NetMessage.SendData(143);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct RequestQuestEffect
{
}
NetMessage.SendData(144);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SyncItemsWithShimmer
{
}
NetMessage.SendData(145);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct ShimmerActions
{
}
NetMessage.SendData(146);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SyncLoadout
{
}
NetMessage.SendData(147);
大小(Size) | 描述(Description) | 类型(Type) | 说明(Note) |
---|
public struct SyncItemCannotBeTakenByEnemies
{
}
NetMessage.SendData(148);
public struct Color
{
public byte R;
public byte G;
public byte B;
}