From 69019c95781944c3f157bed8c7fb0c61c3f6a679 Mon Sep 17 00:00:00 2001 From: ChillerDragon Date: Wed, 23 Nov 2022 10:56:36 +0100 Subject: [PATCH] Register and then properly read ddnet items --- lib/snapshot/unpacker.rb | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/snapshot/unpacker.rb b/lib/snapshot/unpacker.rb index b0a81a7..606ac2b 100644 --- a/lib/snapshot/unpacker.rb +++ b/lib/snapshot/unpacker.rb @@ -31,7 +31,10 @@ end class DDNetSnapItem attr_accessor :notes, :name - def initialize(u, _id) + @@registered_types = [] + + # TODO: rename to register uuid?! + def initialize(u, id) @name = 'ddnet_uuid' @notes = [] len = u.get_int @@ -43,6 +46,29 @@ class DDNetSnapItem col = (i % 2).zero? ? :bg_pink : :bg_yellow @notes.push([col, p[:pos], p[:len], "val=#{val}"]) end + @@registered_types.push(id) + end + + # parses registered ddnet items + def self.parse(u, _item_type) + id = u.get_int + p = u.parsed.last + notes = [] + notes.push([:cyan, p[:pos], p[:len], "id=#{id}"]) + len = u.get_int + p = u.parsed.last + notes.push([:green, p[:pos], p[:len], "len=#{len}"]) + (0...len).each do |i| + val = u.get_int + p = u.parsed.last + col = (i % 2).zero? ? :bg_pink : :bg_yellow + notes.push([col, p[:pos], p[:len], "val=#{val}"]) + end + notes + end + + def self.valid_type?(type) + @@registered_types.include?(type) end end @@ -199,6 +225,14 @@ class SnapshotUnpacker id_parsed[:len], "type=#{item_type} #{obj.name}" ]) + elsif DDNetSnapItem.valid_type?(item_type) + notes.push([ + :green, + id_parsed[:pos], + id_parsed[:len], + "type=#{item_type} ddnet_ex_reg" + ]) + notes += DDNetSnapItem.parse(u, item_type) else invalid = true notes.push([