From b73e472a972183386e8e787a6889ec452de0ef7f Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Wed, 27 Sep 2023 21:43:40 +0300 Subject: finish SvcGameEvent while editing SvcGameEventList (#15) --- pkg/messages/types/svcGameEvent.go | 45 ++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) (limited to 'pkg/messages/types/svcGameEvent.go') diff --git a/pkg/messages/types/svcGameEvent.go b/pkg/messages/types/svcGameEvent.go index e12d75a..4410369 100644 --- a/pkg/messages/types/svcGameEvent.go +++ b/pkg/messages/types/svcGameEvent.go @@ -6,15 +6,52 @@ import ( ) type SvcGameEvent struct { - Length uint16 - Data []byte // TODO: GameEvent[] + Length uint16 + EventID uint32 + EventDescription GameEventDescriptor + EventDescriptors []EventDescriptorKey +} + +type EventDescriptorKey struct { + Name string + Descriptor any } func ParseSvcGameEvent(reader *bitreader.Reader) SvcGameEvent { svcGameEvent := SvcGameEvent{ Length: uint16(reader.TryReadBits(11)), } - svcGameEvent.Data = reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)) - writer.TempAppendLine("\t\tData: %v", svcGameEvent.Data) + gameEventReader := bitreader.NewReaderFromBytes(reader.TryReadBitsToSlice(uint64(svcGameEvent.Length)), true) + svcGameEvent.parseGameEvent(gameEventReader) return svcGameEvent } + +func (svcGameEvent *SvcGameEvent) parseGameEvent(reader *bitreader.Reader) { + svcGameEvent.EventID = uint32(reader.TryReadBits(9)) + svcGameEvent.EventDescription = GameEventList.GameEventDescriptor[svcGameEvent.EventID] + writer.TempAppendLine("\t\t%s (%d):", svcGameEvent.EventDescription.Name, svcGameEvent.EventID) + for _, descriptor := range svcGameEvent.EventDescription.Keys { + var value any + switch descriptor.Type { + case EventDescriptorString: + value = reader.TryReadString() + case EventDescriptorFloat: + value = reader.TryReadFloat32() + case EventDescriptorInt32: + value = reader.TryReadSInt32() + case EventDescriptorInt16: + value = reader.TryReadSInt16() + case EventDescriptorInt8: + value = reader.TryReadUInt8() + case EventDescriptorBool: + value = reader.TryReadBool() + case EventDescriptorUInt64: + value = reader.TryReadUInt64() + } + svcGameEvent.EventDescriptors = append(svcGameEvent.EventDescriptors, EventDescriptorKey{ + Name: descriptor.Name, + Descriptor: value, + }) + writer.TempAppendLine("\t\t\t%s: %v", descriptor.Name, value) + } +} -- cgit v1.2.3