예제 #1
0
        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();
            }
        }
예제 #2
0
        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();
            }
        }
예제 #3
0
 public static SetTemporarySwitchEvent Serdes(SetTemporarySwitchEvent e, ISerializer s)
 {
     e ??= new SetTemporarySwitchEvent();
     s.Begin();
     e.Operation = s.EnumU8(nameof(Operation), e.Operation);
     e.Unk3      = s.UInt8(nameof(Unk3), e.Unk3);
     e.Unk4      = s.UInt8(nameof(Unk4), e.Unk4);
     e.Unk5      = s.UInt8(nameof(Unk5), e.Unk5);
     e.SwitchId  = s.EnumU16(nameof(SwitchId), e.SwitchId);
     e.Unk8      = s.UInt16(nameof(Unk8), e.Unk8);
     ApiUtil.Assert(e.Unk4 == 0);
     ApiUtil.Assert(e.Unk5 == 0);
     ApiUtil.Assert(e.Unk8 == 0);
     s.End();
     return(e);
 }
예제 #4
0
        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()
            });
예제 #5
0
        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))
            });