예제 #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();
            }
        }
 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);
 }
예제 #5
0
        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);
        }
예제 #6
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()
            });
예제 #7
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))
            });