tf2_line_parser 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +60 -51
  3. data/lib/tf2_line_parser/events/airshot.rb +24 -5
  4. data/lib/tf2_line_parser/events/assist.rb +4 -0
  5. data/lib/tf2_line_parser/events/capture_block.rb +3 -3
  6. data/lib/tf2_line_parser/events/charge_deployed.rb +3 -3
  7. data/lib/tf2_line_parser/events/chat.rb +14 -3
  8. data/lib/tf2_line_parser/events/connect.rb +3 -3
  9. data/lib/tf2_line_parser/events/damage.rb +23 -5
  10. data/lib/tf2_line_parser/events/disconnect.rb +3 -3
  11. data/lib/tf2_line_parser/events/domination.rb +4 -0
  12. data/lib/tf2_line_parser/events/event.rb +112 -5
  13. data/lib/tf2_line_parser/events/headshot_damage.rb +4 -5
  14. data/lib/tf2_line_parser/events/heal.rb +4 -5
  15. data/lib/tf2_line_parser/events/kill.rb +4 -5
  16. data/lib/tf2_line_parser/events/medic_death.rb +4 -5
  17. data/lib/tf2_line_parser/events/pickup_item.rb +4 -0
  18. data/lib/tf2_line_parser/events/player_action_event.rb +3 -3
  19. data/lib/tf2_line_parser/events/pvp_event.rb +4 -5
  20. data/lib/tf2_line_parser/events/rcon_command.rb +24 -0
  21. data/lib/tf2_line_parser/events/revenge.rb +4 -0
  22. data/lib/tf2_line_parser/events/role_change.rb +4 -0
  23. data/lib/tf2_line_parser/events/spawn.rb +4 -0
  24. data/lib/tf2_line_parser/events/suicide.rb +4 -0
  25. data/lib/tf2_line_parser/player.rb +3 -2
  26. data/lib/tf2_line_parser/version.rb +1 -1
  27. data/spec/fixtures/logs/broder_vs_epsilon.log +1 -0
  28. data/spec/lib/tf2_line_parser/parser_spec.rb +102 -47
  29. data/spec/lib/tf2_line_parser/player_spec.rb +2 -2
  30. data/spec/spec_helper.rb +2 -3
  31. data/tf2_line_parser.gemspec +4 -3
  32. metadata +28 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63ba39004702334d3877c7656e29ace89831fa7fd14d476364675e894ceb0333
4
- data.tar.gz: 9e5454836fbc05685e7a428015f3772d7d1d193073d74b8c469910445660b2df
3
+ metadata.gz: 01e322507f92ef5ebd648bf65a7412a916e3a84b118c58bb322edcee2539f85e
4
+ data.tar.gz: f1af28f6e5cc32f7579e80f73eb353cb4406c3902ae72ecb8fd13f4cf20c2a23
5
5
  SHA512:
6
- metadata.gz: 6c9372fa0970de3e30f809605bf054eac603bb3d2115fe6718f5c5c1afdbad18f302ce08feaa3e5afe8f33ac0a180b24543f2a2d5edd641ba46978b45d3268df
7
- data.tar.gz: e4b2ef25b0756e89d3db87808c3cb91e00d4219880127fbf267e23c8cec4194908de1d4563f150b837e79197653ba835b2b282d03b1f3aee1075acde1ac774db
6
+ metadata.gz: f2e66e19141bb1109c3c35ea0cd993f5b67c7a688f1022e31595aae187a038c2aee6618d0a2b51b5988e99eede992710ba1426730674b80bf41da9162882806a
7
+ data.tar.gz: 67d849993089b15ff95af89cabd3fe680d49afcc4640a5a8b245bd9dfdc3d7ddedbe5a24de88fae73acc27998329c41b27e66c86a45570bec0f4df1c85f328d7
data/Gemfile.lock CHANGED
@@ -1,74 +1,83 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tf2_line_parser (0.2.1)
4
+ tf2_line_parser (0.2.3)
5
5
  activesupport
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (6.1.3.2)
11
- concurrent-ruby (~> 1.0, >= 1.0.2)
10
+ activesupport (8.0.2)
11
+ base64
12
+ benchmark (>= 0.3)
13
+ bigdecimal
14
+ concurrent-ruby (~> 1.0, >= 1.3.1)
15
+ connection_pool (>= 2.2.5)
16
+ drb
12
17
  i18n (>= 1.6, < 2)
18
+ logger (>= 1.4.2)
13
19
  minitest (>= 5.1)
14
- tzinfo (~> 2.0)
15
- zeitwerk (~> 2.3)
16
- coderay (1.1.1)
17
- concurrent-ruby (1.1.8)
18
- coveralls (0.8.21)
19
- json (>= 1.8, < 3)
20
- simplecov (~> 0.14.1)
21
- term-ansicolor (~> 1.3)
22
- thor (~> 0.19.4)
23
- tins (~> 1.6)
24
- diff-lcs (1.3)
25
- docile (1.1.5)
26
- i18n (1.8.10)
20
+ securerandom (>= 0.3)
21
+ tzinfo (~> 2.0, >= 2.0.5)
22
+ uri (>= 0.13.1)
23
+ base64 (0.3.0)
24
+ benchmark (0.4.1)
25
+ bigdecimal (3.2.2)
26
+ concurrent-ruby (1.3.5)
27
+ connection_pool (2.5.3)
28
+ coveralls_reborn (0.29.0)
29
+ simplecov (~> 0.22.0)
30
+ term-ansicolor (~> 1.7)
31
+ thor (~> 1.2)
32
+ tins (~> 1.32)
33
+ diff-lcs (1.6.2)
34
+ docile (1.4.1)
35
+ drb (2.2.3)
36
+ i18n (1.14.7)
27
37
  concurrent-ruby (~> 1.0)
28
- json (2.1.0)
29
- method_source (0.8.2)
30
- minitest (5.14.4)
31
- pry (0.10.4)
32
- coderay (~> 1.1.0)
33
- method_source (~> 0.8.1)
34
- slop (~> 3.4)
35
- pry-nav (0.2.4)
36
- pry (>= 0.9.10, < 0.11.0)
37
- rspec (3.5.0)
38
- rspec-core (~> 3.5.0)
39
- rspec-expectations (~> 3.5.0)
40
- rspec-mocks (~> 3.5.0)
41
- rspec-core (3.5.4)
42
- rspec-support (~> 3.5.0)
43
- rspec-expectations (3.5.0)
38
+ json (2.12.2)
39
+ logger (1.7.0)
40
+ minitest (5.25.5)
41
+ rspec (3.13.1)
42
+ rspec-core (~> 3.13.0)
43
+ rspec-expectations (~> 3.13.0)
44
+ rspec-mocks (~> 3.13.0)
45
+ rspec-core (3.13.4)
46
+ rspec-support (~> 3.13.0)
47
+ rspec-expectations (3.13.5)
44
48
  diff-lcs (>= 1.2.0, < 2.0)
45
- rspec-support (~> 3.5.0)
46
- rspec-mocks (3.5.0)
49
+ rspec-support (~> 3.13.0)
50
+ rspec-mocks (3.13.5)
47
51
  diff-lcs (>= 1.2.0, < 2.0)
48
- rspec-support (~> 3.5.0)
49
- rspec-support (3.5.0)
50
- simplecov (0.14.1)
51
- docile (~> 1.1.0)
52
- json (>= 1.8, < 3)
53
- simplecov-html (~> 0.10.0)
54
- simplecov-html (0.10.1)
55
- slop (3.6.0)
56
- term-ansicolor (1.6.0)
52
+ rspec-support (~> 3.13.0)
53
+ rspec-support (3.13.4)
54
+ securerandom (0.4.1)
55
+ simplecov (0.22.0)
56
+ docile (~> 1.1)
57
+ simplecov-html (~> 0.11)
58
+ simplecov_json_formatter (~> 0.1)
59
+ simplecov-html (0.13.1)
60
+ simplecov_json_formatter (0.1.4)
61
+ sync (0.5.0)
62
+ term-ansicolor (1.11.2)
57
63
  tins (~> 1.0)
58
- thor (0.19.4)
59
- tins (1.15.0)
60
- tzinfo (2.0.4)
64
+ thor (1.3.2)
65
+ tins (1.38.0)
66
+ bigdecimal
67
+ sync
68
+ tzinfo (2.0.6)
61
69
  concurrent-ruby (~> 1.0)
62
- zeitwerk (2.4.2)
70
+ uri (1.0.3)
63
71
 
64
72
  PLATFORMS
65
73
  ruby
66
74
 
67
75
  DEPENDENCIES
68
- coveralls
69
- pry-nav
70
- rspec (~> 3.5.0)
76
+ coveralls_reborn
77
+ json
78
+ rspec
79
+ simplecov
71
80
  tf2_line_parser!
72
81
 
73
82
  BUNDLED WITH
74
- 1.14.5
83
+ 2.3.16
@@ -12,14 +12,33 @@ module TF2LineParser
12
12
  end
13
13
 
14
14
  def self.attributes
15
- @attributes ||= %i[time player_nick player_steamid player_team target_nick target_steamid
16
- target_team value weapon airshot]
15
+ @attributes ||= %i[time player_section target_section weapon airshot]
17
16
  end
18
17
 
19
- def initialize(time, player_name, player_steamid, player_team, target_name, target_steamid, target_team, value, weapon, airshot)
18
+ def self.regex_results(matched_line)
19
+ time = matched_line['time']
20
+ player_section = matched_line['player_section']
21
+ target_section = matched_line['target_section']
22
+ value = matched_line['value']
23
+ weapon = matched_line['weapon']
24
+ airshot = matched_line['airshot']
25
+
26
+ # Parse player section
27
+ player_name, player_uid, player_steamid, player_team = parse_player_section(player_section)
28
+
29
+ # Parse target section if present
30
+ target_name, target_uid, target_steamid, target_team = nil, nil, nil, nil
31
+ if target_section
32
+ target_name, target_uid, target_steamid, target_team = parse_target_section(target_section)
33
+ end
34
+
35
+ [time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon, airshot]
36
+ end
37
+
38
+ def initialize(time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon, airshot)
20
39
  @time = parse_time(time)
21
- @player = Player.new(player_name, player_steamid, player_team)
22
- @target = Player.new(target_name, target_steamid, target_team) if target_name
40
+ @player = Player.new(player_name, player_uid, player_steamid, player_team)
41
+ @target = Player.new(target_name, target_uid, target_steamid, target_team) if target_name
23
42
  @value = value.to_i
24
43
  @weapon = weapon
25
44
  @airshot = (airshot.to_i == 1)
@@ -6,6 +6,10 @@ module TF2LineParser
6
6
  def self.regex
7
7
  @regex ||= /#{regex_time} #{regex_player} triggered "kill assist" against #{regex_target}/.freeze
8
8
  end
9
+
10
+ def self.attributes
11
+ @attributes ||= %i[time player_section target_section]
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -8,12 +8,12 @@ module TF2LineParser
8
8
  end
9
9
 
10
10
  def self.attributes
11
- @attributes ||= %i[time player_nick player_steamid player_team cp_number cp_name]
11
+ @attributes ||= %i[time player_section cp_number cp_name]
12
12
  end
13
13
 
14
- def initialize(time, player_name, player_steam_id, player_team, cap_number, cap_name)
14
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, cap_number, cap_name)
15
15
  @time = parse_time(time)
16
- @player = Player.new(player_name, player_steam_id, player_team)
16
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
17
17
  @cap_number = cap_number
18
18
  @cap_name = cap_name
19
19
  end
@@ -8,12 +8,12 @@ module TF2LineParser
8
8
  end
9
9
 
10
10
  def self.attributes
11
- @attributes ||= %i[time player_nick player_steamid player_team]
11
+ @attributes ||= %i[time player_section]
12
12
  end
13
13
 
14
- def initialize(time, name, steam_id, team)
14
+ def initialize(time, name, uid, steam_id, team)
15
15
  @time = parse_time(time)
16
- @player = Player.new(name, steam_id, team)
16
+ @player = Player.new(name, uid, steam_id, team)
17
17
  end
18
18
  end
19
19
  end
@@ -3,14 +3,25 @@
3
3
  module TF2LineParser
4
4
  module Events
5
5
  class Chat < Event
6
- def initialize(time, player_name, player_steam_id, player_team, message)
6
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, message)
7
7
  @time = parse_time(time)
8
- @player = Player.new(player_name, player_steam_id, player_team)
8
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
9
9
  @message = message
10
10
  end
11
11
 
12
12
  def self.attributes
13
- @attributes ||= %i[time player_nick player_steamid player_team message]
13
+ @attributes ||= %i[time player_section message]
14
+ end
15
+
16
+ def self.regex_results(matched_line)
17
+ time = matched_line['time']
18
+ player_section = matched_line['player_section']
19
+ message = matched_line['message']
20
+
21
+ # Parse player section
22
+ player_name, player_uid, player_steamid, player_team = parse_player_section(player_section)
23
+
24
+ [time, player_name, player_uid, player_steamid, player_team, message]
14
25
  end
15
26
  end
16
27
 
@@ -3,14 +3,14 @@
3
3
  module TF2LineParser
4
4
  module Events
5
5
  class Connect < Event
6
- def initialize(time, player_name, player_steam_id, player_team, message)
6
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, message)
7
7
  @time = parse_time(time)
8
- @player = Player.new(player_name, player_steam_id, player_team)
8
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
9
9
  @message = message
10
10
  end
11
11
 
12
12
  def self.attributes
13
- @attributes ||= %i[time player_nick player_steamid player_team message]
13
+ @attributes ||= %i[time player_section message]
14
14
  end
15
15
 
16
16
  def self.regex
@@ -20,14 +20,32 @@ module TF2LineParser
20
20
  end
21
21
 
22
22
  def self.attributes
23
- @attributes ||= %i[time player_nick player_steamid player_team target_nick target_steamid
24
- target_team value weapon]
23
+ @attributes ||= %i[time player_section target_section value weapon]
25
24
  end
26
25
 
27
- def initialize(time, player_name, player_steamid, player_team, target_name, target_steamid, target_team, value, weapon)
26
+ def self.regex_results(matched_line)
27
+ time = matched_line['time']
28
+ player_section = matched_line['player_section']
29
+ target_section = matched_line['target_section']
30
+ value = matched_line['value']
31
+ weapon = matched_line['weapon']
32
+
33
+ # Parse player section
34
+ player_name, player_uid, player_steamid, player_team = parse_player_section(player_section)
35
+
36
+ # Parse target section if present
37
+ target_name, target_uid, target_steamid, target_team = nil, nil, nil, nil
38
+ if target_section
39
+ target_name, target_uid, target_steamid, target_team = parse_target_section(target_section)
40
+ end
41
+
42
+ [time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon]
43
+ end
44
+
45
+ def initialize(time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon)
28
46
  @time = parse_time(time)
29
- @player = Player.new(player_name, player_steamid, player_team)
30
- @target = Player.new(target_name, target_steamid, target_team) if target_name
47
+ @player = Player.new(player_name, player_uid, player_steamid, player_team)
48
+ @target = Player.new(target_name, target_uid, target_steamid, target_team) if target_name
31
49
  @value = value.to_i
32
50
  @weapon = weapon
33
51
  end
@@ -3,14 +3,14 @@
3
3
  module TF2LineParser
4
4
  module Events
5
5
  class Disconnect < Event
6
- def initialize(time, player_name, player_steam_id, player_team, message)
6
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, message)
7
7
  @time = parse_time(time)
8
- @player = Player.new(player_name, player_steam_id, player_team)
8
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
9
9
  @message = message
10
10
  end
11
11
 
12
12
  def self.attributes
13
- @attributes ||= %i[time player_nick player_steamid player_team message]
13
+ @attributes ||= %i[time player_section message]
14
14
  end
15
15
 
16
16
  def self.regex
@@ -6,6 +6,10 @@ module TF2LineParser
6
6
  def self.regex
7
7
  @regex ||= /#{regex_time} #{regex_player} triggered "domination" against #{regex_target}.*/.freeze
8
8
  end
9
+
10
+ def self.attributes
11
+ @attributes ||= %i[time player_section target_section]
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -15,11 +15,11 @@ module TF2LineParser
15
15
  end
16
16
 
17
17
  def self.regex_player
18
- @regex_player ||= '"(?\'player_nick\'.+)<(?\'player_uid\'\d+)><(?\'player_steamid\'(\[\S+\]|STEAM_\S+))><(?\'player_team\'Red|Blue|Spectator|TERRORIST|CT||)>"'
18
+ @regex_player ||= /"(?<player_section>.*?)"/
19
19
  end
20
20
 
21
21
  def self.regex_target
22
- @regex_target ||= '"(?\'target_nick\'.+)<(?\'target_uid\'\d+)><(?\'target_steamid\'(\[\S+\]|STEAM_\S+))><(?\'target_team\'Red|Blue|TERRORIST|CT)>"'
22
+ @regex_target ||= /"(?<target_section>.*?)"/
23
23
  end
24
24
 
25
25
  def self.regex_cap
@@ -38,19 +38,126 @@ module TF2LineParser
38
38
  # ordered by how common the messages are
39
39
  @types ||= [Damage, Heal, PickupItem, Assist, Kill, CaptureBlock, PointCapture, ChargeDeployed,
40
40
  MedicDeath, RoleChange, Spawn, Airshot, HeadshotDamage, Suicide, Say, TeamSay, Domination, Revenge, RoundWin, CurrentScore,
41
- RoundLength, RoundStart, Connect, Disconnect, ConsoleSay, MatchEnd, FinalScore,
41
+ RoundLength, RoundStart, Connect, Disconnect, RconCommand, ConsoleSay, MatchEnd, FinalScore,
42
42
  RoundStalemate, Unknown].freeze
43
43
  end
44
44
 
45
45
  def self.regex_results(matched_line)
46
- attributes.collect do |attribute|
47
- matched_line[attribute]
46
+ out = []
47
+ attributes.each do |attribute|
48
+ case attribute
49
+ when :player_section
50
+ if matched_line['player_section']
51
+ out.concat(parse_player_section(matched_line['player_section']))
52
+ else
53
+ out.concat([nil, nil, nil, nil])
54
+ end
55
+ when :target_section
56
+ if matched_line['target_section']
57
+ out.concat(parse_target_section(matched_line['target_section']))
58
+ else
59
+ out.concat([nil, nil, nil, nil])
60
+ end
61
+ else
62
+ out << matched_line[attribute]
63
+ end
48
64
  end
65
+ out
49
66
  end
50
67
 
51
68
  def parse_time(time_string)
52
69
  Time.strptime(time_string, Event.time_format)
53
70
  end
71
+
72
+ def self.parse_player_section(section)
73
+ return [nil, nil, nil, nil] unless section
74
+
75
+ # Find all <...> groups in the section
76
+ parts = section.scan(/<([^>]*)>/)
77
+ return [nil, nil, nil, nil] if parts.length < 2
78
+
79
+ # For the cheeky name tests, we need to find the last complete set of uid/steamid/team
80
+ # Look for the pattern: <uid><steamid><team> at the end
81
+ if parts.length >= 3
82
+ # Try to find the last complete set of 3 groups
83
+ # Start from the end and work backwards
84
+ last_valid_set = nil
85
+ (parts.length - 2).downto(0) do |i|
86
+ if i + 2 < parts.length
87
+ uid = parts[i][0]
88
+ steamid = parts[i + 1][0]
89
+ team = parts[i + 2][0]
90
+
91
+ # Check if this looks like a valid set (uid is numeric, steamid looks like steam id, team is valid)
92
+ if uid.match?(/^\d+$/) && (steamid.start_with?('STEAM_') || steamid.start_with?('[U:')) && ['Red', 'Blue', 'Unassigned', 'Spectator', ''].include?(team)
93
+ # This looks like a valid player info set
94
+ last_valid_set = [i, uid, steamid, team]
95
+ break # Take the last (rightmost) valid set
96
+ end
97
+ end
98
+ end
99
+
100
+ if last_valid_set
101
+ i, uid, steamid, team = last_valid_set
102
+ # The name is everything before the first <...> group of this set
103
+ uid_start = section.index("<#{uid}>")
104
+ if uid_start
105
+ name = section[0...uid_start]
106
+ return [name, uid, steamid, team]
107
+ end
108
+ end
109
+ end
110
+
111
+ # Handle cases with 2 or 3 groups (normal case)
112
+ if parts.length == 2
113
+ # Only uid and steamid, no team
114
+ uid = parts[0][0]
115
+ steamid = parts[1][0]
116
+ team = ""
117
+ else
118
+ # uid, steamid, and team
119
+ uid = parts[-3][0]
120
+ steamid = parts[-2][0]
121
+ team = parts[-1][0]
122
+ end
123
+
124
+ # The name is everything before the first <...> group
125
+ name_end = section.index("<#{uid}>")
126
+ return [nil, nil, nil, nil] unless name_end
127
+
128
+ name = section[0...name_end]
129
+
130
+ [name, uid, steamid, team]
131
+ end
132
+
133
+ def self.parse_target_section(section)
134
+ return [nil, nil, nil, nil] unless section
135
+
136
+ # Same logic as player but for targets
137
+ parts = section.scan(/<([^>]*)>/)
138
+ return [nil, nil, nil, nil] if parts.length < 2
139
+
140
+ # Handle cases with 2 or 3 groups
141
+ if parts.length == 2
142
+ # Only uid and steamid, no team
143
+ uid = parts[0][0]
144
+ steamid = parts[1][0]
145
+ team = ""
146
+ else
147
+ # uid, steamid, and team
148
+ uid = parts[-3][0]
149
+ steamid = parts[-2][0]
150
+ team = parts[-1][0]
151
+ end
152
+
153
+ # The name is everything before the first <...> group
154
+ name_end = section.index("<#{uid}>")
155
+ return [nil, nil, nil, nil] unless name_end
156
+
157
+ name = section[0...name_end]
158
+
159
+ [name, uid, steamid, team]
160
+ end
54
161
  end
55
162
  end
56
163
  end
@@ -12,14 +12,13 @@ module TF2LineParser
12
12
  end
13
13
 
14
14
  def self.attributes
15
- @attributes ||= %i[time player_nick player_steamid player_team target_nick target_steamid
16
- target_team value weapon]
15
+ @attributes ||= %i[time player_section target_section value weapon]
17
16
  end
18
17
 
19
- def initialize(time, player_name, player_steamid, player_team, target_name, target_steamid, target_team, value, weapon)
18
+ def initialize(time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon)
20
19
  @time = parse_time(time)
21
- @player = Player.new(player_name, player_steamid, player_team)
22
- @target = Player.new(target_name, target_steamid, target_team) if target_name
20
+ @player = Player.new(player_name, player_uid, player_steamid, player_team)
21
+ @target = Player.new(target_name, target_uid, target_steamid, target_team) if target_name
23
22
  @value = value.to_i
24
23
  @weapon = weapon
25
24
  end
@@ -8,14 +8,13 @@ module TF2LineParser
8
8
  end
9
9
 
10
10
  def self.attributes
11
- @attributes ||= %i[time player_nick player_steamid player_team target_nick target_steamid
12
- target_team value]
11
+ @attributes ||= %i[time player_section target_section value]
13
12
  end
14
13
 
15
- def initialize(time, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team, value)
14
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, target_name, target_uid, target_steam_id, target_team, value)
16
15
  @time = parse_time(time)
17
- @player = Player.new(player_name, player_steam_id, player_team)
18
- @target = Player.new(target_name, target_steam_id, target_team)
16
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
17
+ @target = Player.new(target_name, target_uid, target_steam_id, target_team)
19
18
  @value = value.to_i
20
19
  end
21
20
  end
@@ -16,14 +16,13 @@ module TF2LineParser
16
16
  end
17
17
 
18
18
  def self.attributes
19
- @attributes ||= %i[time player_nick player_steamid player_team target_nick target_steamid
20
- target_team weapon customkill]
19
+ @attributes ||= %i[time player_section target_section weapon customkill]
21
20
  end
22
21
 
23
- def initialize(time, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team, weapon, customkill)
22
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, target_name, target_uid, target_steam_id, target_team, weapon, customkill)
24
23
  @time = parse_time(time)
25
- @player = Player.new(player_name, player_steam_id, player_team)
26
- @target = Player.new(target_name, target_steam_id, target_team)
24
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
25
+ @target = Player.new(target_name, target_uid, target_steam_id, target_team)
27
26
  @weapon = weapon
28
27
  @customkill = customkill
29
28
  end
@@ -12,14 +12,13 @@ module TF2LineParser
12
12
  end
13
13
 
14
14
  def self.attributes
15
- @attributes ||= %i[time player_nick player_steamid player_team target_nick target_steamid
16
- target_team healing ubercharge]
15
+ @attributes ||= %i[time player_section target_section healing ubercharge]
17
16
  end
18
17
 
19
- def initialize(time, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team, healing, ubercharge)
18
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, target_name, target_uid, target_steam_id, target_team, healing, ubercharge)
20
19
  @time = parse_time(time)
21
- @player = Player.new(player_name, player_steam_id, player_team)
22
- @target = Player.new(target_name, target_steam_id, target_team)
20
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
21
+ @target = Player.new(target_name, target_uid, target_steam_id, target_team)
23
22
  @healing = healing.to_i
24
23
  @ubercharge = (ubercharge == '1')
25
24
  end
@@ -14,6 +14,10 @@ module TF2LineParser
14
14
  def self.item
15
15
  :item
16
16
  end
17
+
18
+ def self.attributes
19
+ @attributes ||= %i[time player_section item]
20
+ end
17
21
  end
18
22
  end
19
23
  end
@@ -8,12 +8,12 @@ module TF2LineParser
8
8
  end
9
9
 
10
10
  def self.attributes
11
- @attributes ||= [:time, :player_nick, :player_steamid, :player_team, item]
11
+ @attributes ||= [:time, :player_section, :item]
12
12
  end
13
13
 
14
- def initialize(time, player_name, player_steam_id, player_team, item = self.class.item)
14
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, item = self.class.item)
15
15
  @time = parse_time(time)
16
- @player = Player.new(player_name, player_steam_id, player_team)
16
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
17
17
  instance_variable_set("@#{self.class.item}", item)
18
18
  end
19
19
  end
@@ -4,14 +4,13 @@ module TF2LineParser
4
4
  module Events
5
5
  class PVPEvent < Event
6
6
  def self.attributes
7
- @attributes ||= %i[time player_nick player_steamid player_team target_nick target_steamid
8
- target_team]
7
+ @attributes ||= %i[time player_section target_section]
9
8
  end
10
9
 
11
- def initialize(time, player_name, player_steam_id, player_team, target_name, target_steam_id, target_team)
10
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, target_name, target_uid, target_steam_id, target_team)
12
11
  @time = parse_time(time)
13
- @player = Player.new(player_name, player_steam_id, player_team)
14
- @target = Player.new(target_name, target_steam_id, target_team)
12
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
13
+ @target = Player.new(target_name, target_uid, target_steam_id, target_team)
15
14
  end
16
15
  end
17
16
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TF2LineParser
4
+ module Events
5
+ class RconCommand < Event
6
+ def self.regex
7
+ @regex ||= /#{regex_time} rcon from #{regex_rcon}/.freeze
8
+ end
9
+
10
+ def self.regex_rcon
11
+ @regex_rcon ||= '(?\'message\'.*")'
12
+ end
13
+
14
+ def self.attributes
15
+ @attributes ||= %i[time message]
16
+ end
17
+
18
+ def initialize(time, message)
19
+ @time = parse_time(time)
20
+ @message = message
21
+ end
22
+ end
23
+ end
24
+ end