public Ability(ServerZoneIpcType Type, byte[] message, int offset) { this.Type = Type; int headerLength = 42; PacketParser.ParsePacket(message, offset, out Header); int maxCount = MaxCount(); int count = Header.Count > maxCount ? maxCount : Header.Count; int targetOffset = offset + headerLength + 4 * 16 * maxCount + 6; Unknown8 = BitConverter.ToUInt32(message, targetOffset - 6); Unknown9 = BitConverter.ToUInt16(message, targetOffset - 2); Target = new AbilityTarget[count]; for (int i = 0; i < count; ++i) { var targetItem = new AbilityTarget(); targetItem.ID = BitConverter.ToUInt32(message, targetOffset + i * 2 * 4); targetItem.Unknown0 = BitConverter.ToUInt32(message, targetOffset + i * 2 * 4 + 4); targetItem.ParseArguments(message, headerLength + 4 * 16 * i); Target[i] = targetItem; } }
public static IPCBase ParseIPCPacket(ServerZoneIpcType type, byte[] message, int offset, Dictionary <string, string> parsedValues) { switch (type) { case ServerZoneIpcType.Announcement: return(new IPC.Announcement(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.CompanyBoard: return(new IPC.CompanyBoard(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.GroupMessage: return(new IPC.GroupMessage(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.PublicMessage: return(new IPC.PublicMessage(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.Ability1: case ServerZoneIpcType.Ability8: case ServerZoneIpcType.Ability16: case ServerZoneIpcType.Ability24: case ServerZoneIpcType.Ability32: return(new IPC.Ability(type, message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.AddStatusEffect: return(new IPC.AddStatusEffect(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.StatusEffectList: return(new IPC.StatusEffectList(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.ItemInit: return(new IPC.ItemInit(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.ItemChange: return(new IPC.ItemChange(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.ItemSimple: return(new IPC.ItemSimple(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.ActorControl143: return(new IPC.ActorControl143(message, offset).WriteParams(parsedValues)); case ServerZoneIpcType.ActorMove: case (ServerZoneIpcType)0x0145: return(new IPCIgnore()); default: parsedValues.Add("Data", "(unknown)"); return(null); } }