public static ModifyEvent Serdes(ModifyEvent genericEvent, ISerializer s) { var subType = s.EnumU8("SubType", genericEvent?.SubType ?? ModifyType.Unk2); switch (subType) { case ModifyType.SetTemporarySwitch: return(SetTemporarySwitchEvent.Serdes((SetTemporarySwitchEvent)genericEvent, s)); case ModifyType.DisableEventChain: return(DisableEventChainEvent.Serdes((DisableEventChainEvent)genericEvent, s)); case ModifyType.SetNpcActive: return(SetNpcActiveEvent.Serdes((SetNpcActiveEvent)genericEvent, s)); case ModifyType.AddPartyMember: return(AddPartyMemberEvent.Serdes((AddPartyMemberEvent)genericEvent, s)); case ModifyType.AddRemoveInventoryItem: return(AddRemoveInventoryItemEvent.Serdes((AddRemoveInventoryItemEvent)genericEvent, s)); case ModifyType.SetMapLighting: return(SetMapLightingEvent.Serdes((SetMapLightingEvent)genericEvent, s)); case ModifyType.ChangePartyGold: return(ChangePartyGoldEvent.Serdes((ChangePartyGoldEvent)genericEvent, s)); case ModifyType.ChangePartyRations: return(ChangePartyRationsEvent.Serdes((ChangePartyRationsEvent)genericEvent, s)); case ModifyType.ChangeTime: return(ChangeTimeEvent.Serdes((ChangeTimeEvent)genericEvent, s)); case ModifyType.SetPartyLeader: return(SetPartyLeaderEvent.Serdes((SetPartyLeaderEvent)genericEvent, s)); case ModifyType.SetTicker: return(SetTickerEvent.Serdes((SetTickerEvent)genericEvent, s)); case ModifyType.Unk2: return(DummyModifyEvent.Serdes((DummyModifyEvent)genericEvent, s)); default: throw new ArgumentOutOfRangeException(); } }
public static EventNode Load(BinaryReader br, int id, MapEventType type) { var subType = (ModifyType)br.ReadByte(); switch (subType) { case ModifyType.SetTemporarySwitch: return(SetTemporarySwitchEvent.Load(br, id, type, subType)); case ModifyType.DisableEventChain: return(DisableEventChainEvent.Load(br, id, type, subType)); case ModifyType.SetNpcActive: return(SetNpcActiveEvent.Load(br, id, type, subType)); case ModifyType.AddPartyMember: return(AddPartyMemberEvent.Load(br, id, type, subType)); case ModifyType.AddRemoveInventoryItem: return(AddRemoveInventoryItemEvent.Load(br, id, type, subType)); case ModifyType.SetMapLighting: return(SetMapLightingEvent.Load(br, id, type, subType)); case ModifyType.ChangePartyGold: return(ChangePartyGoldEvent.Load(br, id, type, subType)); case ModifyType.ChangePartyRations: return(ChangePartyRationsEvent.Load(br, id, type, subType)); case ModifyType.ChangeTime: return(ChangeTimeEvent.Load(br, id, type, subType)); case ModifyType.SetPartyLeader: return(SetPartyLeaderEvent.Load(br, id, type, subType)); case ModifyType.SetTicker: return(SetTickerEvent.Load(br, id, type, subType)); case ModifyType.Unk2: return(DummyModifyEvent.Load(br, id, type, subType)); default: throw new ArgumentOutOfRangeException(); } }
public static AddRemoveInventoryItemEvent Serdes(AddRemoveInventoryItemEvent e, ISerializer s) { e ??= new AddRemoveInventoryItemEvent(); s.Begin(); e.Operation = s.EnumU8(nameof(Operation), e.Operation); e.Amount = s.UInt8(nameof(Amount), e.Amount); e.Unk4 = s.UInt8(nameof(Unk4), e.Unk4); e.Unk5 = s.UInt8(nameof(Unk5), e.Unk5); e.ItemId = (ItemId)StoreIncremented.Serdes(nameof(e.ItemId), (ushort)e.ItemId, s.UInt16); e.Unk8 = s.UInt16(nameof(Unk8), e.Unk8); s.End(); return(e); }
public static AddRemoveInventoryItemEvent Serdes(AddRemoveInventoryItemEvent e, AssetMapping mapping, ISerializer s) { if (s == null) { throw new ArgumentNullException(nameof(s)); } e ??= new AddRemoveInventoryItemEvent(); e.Operation = s.EnumU8(nameof(Operation), e.Operation); e.Amount = s.UInt8(nameof(Amount), e.Amount); e.Unk4 = s.UInt8(nameof(Unk4), e.Unk4); e.Unk5 = s.UInt8(nameof(Unk5), e.Unk5); e.ItemId = ItemId.SerdesU16(nameof(e.ItemId), e.ItemId, AssetType.Item, mapping, s); e.Unk8 = s.UInt16(nameof(Unk8), e.Unk8); return(e); }
public static AddRemoveInventoryItemEvent Serdes(AddRemoveInventoryItemEvent e, AssetMapping mapping, ISerializer s) { if (s == null) { throw new ArgumentNullException(nameof(s)); } e ??= new AddRemoveInventoryItemEvent(); e.Operation = s.EnumU8(nameof(Operation), e.Operation); e.Amount = s.UInt8(nameof(Amount), e.Amount); int zeroes = s.UInt8(null, 0); zeroes += s.UInt8(null, 0); e.ItemId = ItemId.SerdesU16(nameof(e.ItemId), e.ItemId, AssetType.Item, mapping, s); zeroes += s.UInt16(null, 0); s.Assert(zeroes == 0, "AddRemoveInventoryItem: Expected fields 4,5 & 8 to be 0"); return(e); }
public static ModifyEvent Serdes(ModifyEvent genericEvent, ISerializer s) { var subType = s.EnumU8("SubType", genericEvent?.SubType ?? ModifyType.Unk2); return(subType switch { ModifyType.SetTemporarySwitch => SetTemporarySwitchEvent.Serdes((SetTemporarySwitchEvent)genericEvent, s), ModifyType.DisableEventChain => DisableEventChainEvent.Serdes((DisableEventChainEvent)genericEvent, s), ModifyType.SetNpcActive => SetNpcActiveEvent.Serdes((SetNpcActiveEvent)genericEvent, s), ModifyType.AddPartyMember => AddPartyMemberEvent.Serdes((AddPartyMemberEvent)genericEvent, s), ModifyType.AddRemoveInventoryItem => AddRemoveInventoryItemEvent.Serdes((AddRemoveInventoryItemEvent)genericEvent, s), ModifyType.SetMapLighting => SetMapLightingEvent.Serdes((SetMapLightingEvent)genericEvent, s), ModifyType.ChangePartyGold => ChangePartyGoldEvent.Serdes((ChangePartyGoldEvent)genericEvent, s), ModifyType.ChangePartyRations => ChangePartyRationsEvent.Serdes((ChangePartyRationsEvent)genericEvent, s), ModifyType.ChangeTime => ChangeTimeEvent.Serdes((ChangeTimeEvent)genericEvent, s), ModifyType.SetPartyLeader => SetPartyLeaderEvent.Serdes((SetPartyLeaderEvent)genericEvent, s), ModifyType.SetTicker => SetTickerEvent.Serdes((SetTickerEvent)genericEvent, s), ModifyType.Unk2 => DummyModifyEvent.Serdes((DummyModifyEvent)genericEvent, s), _ => throw new ArgumentOutOfRangeException() });
public static ModifyEvent BaseSerdes(ModifyEvent genericEvent, AssetMapping mapping, ISerializer s) { if (s == null) { throw new ArgumentNullException(nameof(s)); } var subType = s.EnumU8("SubType", genericEvent?.SubType ?? ModifyType.Unk2); return(subType switch { ModifyType.SetTemporarySwitch => SetTemporarySwitchEvent.Serdes((SetTemporarySwitchEvent)genericEvent, mapping, s), ModifyType.DisableEventChain => DisableEventChainEvent.Serdes((DisableEventChainEvent)genericEvent, s), ModifyType.SetNpcActive => SetNpcActiveEvent.Serdes((SetNpcActiveEvent)genericEvent, s), ModifyType.AddPartyMember => AddPartyMemberEvent.Serdes((AddPartyMemberEvent)genericEvent, mapping, s), ModifyType.AddRemoveInventoryItem => AddRemoveInventoryItemEvent.Serdes((AddRemoveInventoryItemEvent)genericEvent, mapping, s), ModifyType.SetMapLighting => SetMapLightingEvent.Serdes((SetMapLightingEvent)genericEvent, s), ModifyType.ChangePartyGold => ChangePartyGoldEvent.Serdes((ChangePartyGoldEvent)genericEvent, s), ModifyType.ChangePartyRations => ChangePartyRationsEvent.Serdes((ChangePartyRationsEvent)genericEvent, s), ModifyType.ChangeTime => ChangeTimeEvent.Serdes((ChangeTimeEvent)genericEvent, s), ModifyType.SetPartyLeader => SetPartyLeaderEvent.Serdes((SetPartyLeaderEvent)genericEvent, mapping, s), ModifyType.SetTicker => SetTickerEvent.Serdes((SetTickerEvent)genericEvent, mapping, s), ModifyType.Unk2 => DummyModifyEvent.Serdes((DummyModifyEvent)genericEvent, s), _ => throw new InvalidEnumArgumentException(nameof(subType), (int)subType, typeof(ModifyType)) });