tf2_line_parser 0.3.2 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8016d55d0b90fc21b2c382984dacfffd2d30f7f6524145255dfc86d0b64b48d2
4
- data.tar.gz: 2a50462784a314698d6eba06aae225b3daa1bf6789fefa9e8fd88d826526e76d
3
+ metadata.gz: 154268d4f08d4e2884a89fa90b3a18b901c6cafbd846fa58636e84fb2b59822f
4
+ data.tar.gz: 4056b354a1d1b3f98b1920250a80b7dc9541042588319510e48d9378bfa7422a
5
5
  SHA512:
6
- metadata.gz: 3ae82f8e65a4be2d80a882faac1628982a2026aa23026f6d179cd6953abf2294fb59f7d44d3bb2000123c34328f4ca8714a872d8cdcb3208b57e531beabb1ef8
7
- data.tar.gz: 520a851cfa90ae2a85d1c88d62c385386cdd6a5f2c3072a8e77ead096426343db372ffc4877656b7d88bbb66b6a1ea7cb2e8e2fe9bc7d1b4fe5c07f95713fd76
6
+ metadata.gz: e154de1385eb0fd25814f087f53578590af635aaff826d6a9a9df822e288359254834c14b0a99170c25dc61bdea57b8712b22913bfe38998fccc07d172b22c8b
7
+ data.tar.gz: f8d7bcd26fb42e81b4de558d302e3574754542e0e1d65593bb925b92749453a64f706a41253df9a4eced5579fed7230f75b6aeb31db03615bbc5877f7e1ae1ea
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tf2_line_parser (0.3.2)
4
+ tf2_line_parser (0.4.0)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -4,11 +4,11 @@ module TF2LineParser
4
4
  module Events
5
5
  class Airshot < Damage
6
6
  def self.regex
7
- @regex ||= /#{regex_time} #{regex_player} triggered "damage" #{regex_damage_against}\(damage "(?'value'\d+)"\)(?:( #{regex_realdamage})?( #{regex_weapon})?( #{regex_airshot})?)$/.freeze
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "damage" #{regex_damage_against}\(damage "(?'value'\d+)"\)#{regex_realdamage}#{regex_weapon}#{regex_healing}#{regex_crit}#{regex_headshot} #{regex_airshot}$/.freeze
8
8
  end
9
9
 
10
10
  def self.regex_airshot
11
- @regex_airshot ||= /(\(airshot "(?'airshot'\w*)"\))?/.freeze
11
+ @regex_airshot ||= '\(airshot "(?\'airshot\'\w*)"\)'
12
12
  end
13
13
 
14
14
  def self.attributes
@@ -0,0 +1,29 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class BuiltObject < Event
4
+ attr_reader :time, :player, :object
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "builtobject" #{regex_object_info}#{regex_position}?/.freeze
8
+ end
9
+
10
+ def self.regex_object_info
11
+ @regex_object_info ||= '\(object "(?\'object\'[^"]+)"\)'
12
+ end
13
+
14
+ def self.regex_position
15
+ @regex_position ||= / \(position "[^"]+"\)/
16
+ end
17
+
18
+ def self.attributes
19
+ @attributes ||= %i[time player_section object]
20
+ end
21
+
22
+ def initialize(time, name, uid, steam_id, team, object)
23
+ @time = parse_time(time)
24
+ @player = Player.new(name, uid, steam_id, team)
25
+ @object = object
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class ChargeEnded < Event
4
+ attr_reader :time, :player, :duration
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "chargeended" #{regex_duration}/.freeze
8
+ end
9
+
10
+ def self.regex_duration
11
+ @regex_duration ||= '\(duration "(?\'duration\'[0-9.]+)"\)'
12
+ end
13
+
14
+ def self.attributes
15
+ @attributes ||= %i[time player_section duration]
16
+ end
17
+
18
+ def initialize(time, name, uid, steam_id, team, duration)
19
+ @time = parse_time(time)
20
+ @player = Player.new(name, uid, steam_id, team)
21
+ @duration = duration.to_f
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class ChargeReady < Event
4
+ attr_reader :time, :player
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "chargeready"/.freeze
8
+ end
9
+
10
+ def self.attributes
11
+ @attributes ||= %i[time player_section]
12
+ end
13
+
14
+ def initialize(time, name, uid, steam_id, team)
15
+ @time = parse_time(time)
16
+ @player = Player.new(name, uid, steam_id, team)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,8 +3,10 @@
3
3
  module TF2LineParser
4
4
  module Events
5
5
  class Damage < Event
6
+ attr_reader :crit, :headshot, :healing
7
+
6
8
  def self.regex
7
- @regex ||= /#{regex_time} #{regex_player} triggered "damage" #{regex_damage_against}\(damage "(?'value'\d+)"\)(?:( #{regex_realdamage})?( #{regex_weapon})?)$/.freeze
9
+ @regex ||= /#{regex_time} #{regex_player} triggered "damage" #{regex_damage_against}\(damage "(?'value'\d+)"\)#{regex_realdamage}#{regex_weapon}#{regex_healing}#{regex_crit}#{regex_headshot}/.freeze
8
10
  end
9
11
 
10
12
  def self.regex_damage_against
@@ -12,15 +14,27 @@ module TF2LineParser
12
14
  end
13
15
 
14
16
  def self.regex_realdamage
15
- @regex_realdamage ||= /(\(realdamage "(?'realdamage'\w*)"\))?/.freeze
17
+ @regex_realdamage ||= /(?: \(realdamage "(?'realdamage'\d*)"\))?/.freeze
16
18
  end
17
19
 
18
20
  def self.regex_weapon
19
- @regex_weapon ||= /(\(weapon "(?'weapon'\w*)"\))?/.freeze
21
+ @regex_weapon ||= /(?: \(weapon "(?'weapon'[^"]*)"\))?/.freeze
22
+ end
23
+
24
+ def self.regex_healing
25
+ @regex_healing ||= /(?: \(healing "(?'healing'\d*)"\))?/.freeze
26
+ end
27
+
28
+ def self.regex_crit
29
+ @regex_crit ||= /(?: \(crit "(?'crit'[^"]*)"\))?/.freeze
30
+ end
31
+
32
+ def self.regex_headshot
33
+ @regex_headshot ||= /(?: \(headshot "(?'headshot'\d*)"\))?/.freeze
20
34
  end
21
35
 
22
36
  def self.attributes
23
- @attributes ||= %i[time player_section target_section value weapon]
37
+ @attributes ||= %i[time player_section target_section value weapon healing crit headshot]
24
38
  end
25
39
 
26
40
  def self.regex_results(matched_line)
@@ -29,6 +43,9 @@ module TF2LineParser
29
43
  target_section = matched_line['target_section']
30
44
  value = matched_line['value']
31
45
  weapon = matched_line['weapon']
46
+ healing = matched_line['healing']
47
+ crit = matched_line['crit']
48
+ headshot = matched_line['headshot']
32
49
 
33
50
  # Parse player section
34
51
  player_name, player_uid, player_steamid, player_team = parse_player_section(player_section)
@@ -39,15 +56,18 @@ module TF2LineParser
39
56
  target_name, target_uid, target_steamid, target_team = parse_target_section(target_section)
40
57
  end
41
58
 
42
- [time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon]
59
+ [time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon, healing, crit, headshot]
43
60
  end
44
61
 
45
- def initialize(time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon)
62
+ def initialize(time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon, healing, crit, headshot)
46
63
  @time = parse_time(time)
47
64
  @player = Player.new(player_name, player_uid, player_steamid, player_team)
48
65
  @target = Player.new(target_name, target_uid, target_steamid, target_team) if target_name
49
66
  @value = value.to_i
50
67
  @weapon = weapon
68
+ @healing = healing.to_i if healing
69
+ @crit = crit
70
+ @headshot = (headshot == '1') if headshot
51
71
  end
52
72
  end
53
73
  end
@@ -0,0 +1,20 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class EmptyUber < Event
4
+ attr_reader :time, :player
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "empty_uber"/.freeze
8
+ end
9
+
10
+ def self.attributes
11
+ @attributes ||= %i[time player_section]
12
+ end
13
+
14
+ def initialize(time, name, uid, steam_id, team)
15
+ @time = parse_time(time)
16
+ @player = Player.new(name, uid, steam_id, team)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class EnteredGame < Event
4
+ attr_reader :time, :player
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} #{regex_player} entered the game/.freeze
8
+ end
9
+
10
+ def self.attributes
11
+ @attributes ||= %i[time player_section]
12
+ end
13
+
14
+ def initialize(time, name, uid, steam_id, team)
15
+ @time = parse_time(time)
16
+ @player = Player.new(name, uid, steam_id, team)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -36,9 +36,9 @@ module TF2LineParser
36
36
 
37
37
  def self.types
38
38
  # ordered by how common the messages are
39
- @types ||= [Damage, Heal, PickupItem, Assist, Kill, CaptureBlock, PointCapture, ChargeDeployed,
40
- MedicDeath, MedicDeathEx, RoleChange, Spawn, Airshot, HeadshotDamage, Suicide, Say, TeamSay, Domination, Revenge, RoundWin, CurrentScore,
41
- RoundLength, RoundStart, Connect, Disconnect, RconCommand, ConsoleSay, MatchEnd, FinalScore,
39
+ @types ||= [HeadshotDamage, Airshot, Damage, Heal, PickupItem, Assist, Kill, CaptureBlock, PointCapture, ChargeDeployed,
40
+ MedicDeath, MedicDeathEx, EmptyUber, ChargeReady, ChargeEnded, FirstHealAfterSpawn, LostUberAdvantage, BuiltObject, PlayerExtinguished, JoinedTeam, EnteredGame, RoleChange, Spawn, Suicide, KilledObject, Say, TeamSay, Domination, Revenge, RoundWin, CurrentScore,
41
+ RoundLength, RoundStart, RoundSetupBegin, RoundSetupEnd, MiniRoundStart, MiniRoundSelected, IntermissionWinLimit, Connect, Disconnect, RconCommand, ConsoleSay, MatchEnd, FinalScore,
42
42
  RoundStalemate, Unknown].freeze
43
43
  end
44
44
 
@@ -0,0 +1,25 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class FirstHealAfterSpawn < Event
4
+ attr_reader :time, :player, :heal_time
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "first_heal_after_spawn" #{regex_heal_time}/.freeze
8
+ end
9
+
10
+ def self.regex_heal_time
11
+ @regex_heal_time ||= '\(time "(?\'heal_time\'[0-9.]+)"\)'
12
+ end
13
+
14
+ def self.attributes
15
+ @attributes ||= %i[time player_section heal_time]
16
+ end
17
+
18
+ def initialize(time, name, uid, steam_id, team, heal_time)
19
+ @time = parse_time(time)
20
+ @player = Player.new(name, uid, steam_id, team)
21
+ @heal_time = heal_time.to_f
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,7 +4,7 @@ module TF2LineParser
4
4
  module Events
5
5
  class HeadshotDamage < Damage
6
6
  def self.regex
7
- @regex ||= /#{regex_time} #{regex_player} triggered "damage" #{regex_damage_against}\(damage "(?'value'\d+)"\)(?:( #{regex_realdamage})?( #{regex_weapon})?) #{regex_headshot}$/.freeze
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "damage" #{regex_damage_against}\(damage "(?'value'\d+)"\)#{regex_realdamage}#{regex_weapon}#{regex_healing}#{regex_crit} #{regex_headshot}$/.freeze
8
8
  end
9
9
 
10
10
  def self.regex_headshot
@@ -15,6 +15,25 @@ module TF2LineParser
15
15
  @attributes ||= %i[time player_section target_section value weapon]
16
16
  end
17
17
 
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
+
25
+ # Parse player section
26
+ player_name, player_uid, player_steamid, player_team = parse_player_section(player_section)
27
+
28
+ # Parse target section if present
29
+ target_name, target_uid, target_steamid, target_team = nil, nil, nil, nil
30
+ if target_section
31
+ target_name, target_uid, target_steamid, target_team = parse_target_section(target_section)
32
+ end
33
+
34
+ [time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon]
35
+ end
36
+
18
37
  def initialize(time, player_name, player_uid, player_steamid, player_team, target_name, target_uid, target_steamid, target_team, value, weapon)
19
38
  @time = parse_time(time)
20
39
  @player = Player.new(player_name, player_uid, player_steamid, player_team)
@@ -0,0 +1,21 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class IntermissionWinLimit < Event
4
+ attr_reader :time, :team, :reason
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} Team "(?'team'Red|Blue|RED|BLUE)" triggered "Intermission_Win_Limit" due to (?'reason'.*)/.freeze
8
+ end
9
+
10
+ def self.attributes
11
+ @attributes ||= %i[time team reason]
12
+ end
13
+
14
+ def initialize(time, team, reason)
15
+ @time = parse_time(time)
16
+ @team = team
17
+ @reason = reason
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class JoinedTeam < PlayerActionEvent
4
+ def self.action_text
5
+ @action_text ||= 'joined team'
6
+ end
7
+
8
+ def self.regex_action
9
+ @regex_team ||= '\"(?\'team_name\'.*)\"'
10
+ end
11
+
12
+ def self.item
13
+ :team_name
14
+ end
15
+
16
+ def self.attributes
17
+ @attributes ||= %i[time player_section team_name]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,54 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class KilledObject < Event
4
+ attr_reader :time, :player, :object, :weapon, :objectowner
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "killedobject" #{regex_object_info}#{regex_attacker_position}?/.freeze
8
+ end
9
+
10
+ def self.regex_object_info
11
+ @regex_object_info ||= '\(object "(?\'object\'[^"]+)"\) \(weapon "(?\'weapon\'[^"]+)"\) \(objectowner "(?\'objectowner_section\'.*?)"\)'
12
+ end
13
+
14
+ def self.regex_attacker_position
15
+ @regex_attacker_position ||= / \(attacker_position "[^"]+"\)/
16
+ end
17
+
18
+ def self.attributes
19
+ @attributes ||= %i[time player_section object weapon objectowner_section]
20
+ end
21
+
22
+ def self.regex_results(matched_line)
23
+ out = []
24
+ attributes.each do |attribute|
25
+ case attribute
26
+ when :player_section
27
+ if matched_line['player_section']
28
+ out.concat(parse_player_section(matched_line['player_section']))
29
+ else
30
+ out.concat([nil, nil, nil, nil])
31
+ end
32
+ when :objectowner_section
33
+ if matched_line['objectowner_section']
34
+ out.concat(parse_player_section(matched_line['objectowner_section']))
35
+ else
36
+ out.concat([nil, nil, nil, nil])
37
+ end
38
+ else
39
+ out << matched_line[attribute]
40
+ end
41
+ end
42
+ out
43
+ end
44
+
45
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, object, weapon, objectowner_name, objectowner_uid, objectowner_steam_id, objectowner_team)
46
+ @time = parse_time(time)
47
+ @player = Player.new(player_name, player_uid, player_steam_id, player_team)
48
+ @object = object
49
+ @weapon = weapon
50
+ @objectowner = Player.new(objectowner_name, objectowner_uid, objectowner_steam_id, objectowner_team)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,25 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class LostUberAdvantage < Event
4
+ attr_reader :time, :player, :advantage_time
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "lost_uber_advantage" #{regex_advantage_time}/.freeze
8
+ end
9
+
10
+ def self.regex_advantage_time
11
+ @regex_advantage_time ||= '\(time "(?\'advantage_time\'[0-9.]+)"\)'
12
+ end
13
+
14
+ def self.attributes
15
+ @attributes ||= %i[time player_section advantage_time]
16
+ end
17
+
18
+ def initialize(time, name, uid, steam_id, team, advantage_time)
19
+ @time = parse_time(time)
20
+ @player = Player.new(name, uid, steam_id, team)
21
+ @advantage_time = advantage_time.to_f
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class MiniRoundSelected < RoundEventWithVariables
4
+ def self.round_variable_regex
5
+ @round_variable_regex ||= /\(round "(?'round'.*)"\)/.freeze
6
+ end
7
+
8
+ def self.round_type
9
+ 'Mini_Round_Selected'
10
+ end
11
+
12
+ def self.round_variable
13
+ @round_variable ||= :round
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class MiniRoundStart < RoundEventWithoutVariables
4
+ def self.round_type
5
+ @round_type ||= 'Mini_Round_Start'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class PlayerExtinguished < Event
4
+ attr_reader :time, :player, :target, :weapon
5
+
6
+ def self.regex
7
+ @regex ||= /#{regex_time} #{regex_player} triggered "player_extinguished" against #{regex_target} with #{regex_weapon}#{regex_positions}?/.freeze
8
+ end
9
+
10
+ def self.regex_weapon
11
+ @regex_weapon ||= '"(?\'weapon\'[^"]+)"'
12
+ end
13
+
14
+ def self.regex_positions
15
+ @regex_positions ||= / \(attacker_position "[^"]+"\) \(victim_position "[^"]+"\)/
16
+ end
17
+
18
+ def self.attributes
19
+ @attributes ||= %i[time player_section target_section weapon]
20
+ end
21
+
22
+ def initialize(time, player_name, player_uid, player_steam_id, player_team, target_name, target_uid, target_steam_id, target_team, weapon)
23
+ @time = parse_time(time)
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)
26
+ @weapon = weapon
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class RoundSetupBegin < RoundEventWithoutVariables
4
+ def self.round_type
5
+ @round_type ||= 'Round_Setup_Begin'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module TF2LineParser
2
+ module Events
3
+ class RoundSetupEnd < RoundEventWithoutVariables
4
+ def self.round_type
5
+ @round_type ||= 'Round_Setup_End'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TF2LineParser
4
- VERSION = '0.3.2'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -39,8 +39,11 @@ module TF2LineParser
39
39
  player_team = 'Red'
40
40
  value = '69'
41
41
  weapon = nil
42
+ healing = nil
43
+ crit = nil
44
+ headshot = nil
42
45
  expect(Events::Damage).to receive(:new).with(anything, player_name, player_uid, player_steam_id, player_team, nil, nil,
43
- nil, nil, value, weapon)
46
+ nil, nil, value, weapon, healing, crit, headshot)
44
47
  parse(line)
45
48
  end
46
49
 
@@ -56,8 +59,11 @@ module TF2LineParser
56
59
  target_team = 'Red'
57
60
  value = '78'
58
61
  weapon = 'tf_projectile_rocket'
62
+ healing = nil
63
+ crit = nil
64
+ headshot = nil
59
65
  expect(Events::Damage).to receive(:new).with(anything, player_name, player_uid, player_steam_id, player_team, target_name,
60
- target_uid, target_steam_id, target_team, value, weapon)
66
+ target_uid, target_steam_id, target_team, value, weapon, healing, crit, headshot)
61
67
  parse(line)
62
68
  end
63
69
 
@@ -73,8 +79,11 @@ module TF2LineParser
73
79
  target_team = 'Red'
74
80
  value = '102'
75
81
  weapon = 'tf_projectile_pipe'
82
+ healing = nil
83
+ crit = nil
84
+ headshot = nil
76
85
  expect(Events::Damage).to receive(:new).with(anything, player_name, player_uid, player_steam_id, player_team, target_name,
77
- target_uid, target_steam_id, target_team, value, weapon)
86
+ target_uid, target_steam_id, target_team, value, weapon, healing, crit, headshot)
78
87
  parse(line)
79
88
  end
80
89
 
@@ -107,8 +116,51 @@ module TF2LineParser
107
116
  target_team = 'Red'
108
117
  value = '98'
109
118
  weapon = 'tf_projectile_pipe'
119
+ healing = nil
120
+ crit = nil
121
+ headshot = nil
110
122
  expect(Events::Damage).to receive(:new).with(anything, player_name, player_uid, player_steam_id, player_team, target_name,
111
- target_uid, target_steam_id, target_team, value, weapon)
123
+ target_uid, target_steam_id, target_team, value, weapon, healing, crit, headshot)
124
+ parse(line)
125
+ end
126
+
127
+ it 'recognizes damage with multiple optional fields' do
128
+ line = 'L 02/02/2014 - 22:25:43: "Aquila<15><STEAM_0:0:43087158><Red>" triggered "damage" against "A \"fake\" -AA-<21><STEAM_0:0:29650428><Blue>" (damage "150") (realdamage "100") (weapon "sniperrifle") (healing "25")'
129
+ player_name = 'Aquila'
130
+ player_uid = '15'
131
+ player_steam_id = 'STEAM_0:0:43087158'
132
+ player_team = 'Red'
133
+ target_name = 'A \"fake\" -AA-'
134
+ target_uid = '21'
135
+ target_steam_id = 'STEAM_0:0:29650428'
136
+ target_team = 'Blue'
137
+ value = '150'
138
+ weapon = 'sniperrifle'
139
+ healing = '25'
140
+ crit = nil
141
+ headshot = nil
142
+ expect(Events::Damage).to receive(:new).with(anything, player_name, player_uid, player_steam_id, player_team, target_name,
143
+ target_uid, target_steam_id, target_team, value, weapon, healing, crit, headshot)
144
+ parse(line)
145
+ end
146
+
147
+ it 'recognizes damage with crit' do
148
+ line = 'L 02/02/2014 - 22:28:30: "krafty<20><STEAM_0:1:31326039><Red>" triggered "damage" against "guilty<26><STEAM_0:0:47824702><Blue>" (damage "2") (weapon "degreaser") (crit "crit")'
149
+ player_name = 'krafty'
150
+ player_uid = '20'
151
+ player_steam_id = 'STEAM_0:1:31326039'
152
+ player_team = 'Red'
153
+ target_name = 'guilty'
154
+ target_uid = '26'
155
+ target_steam_id = 'STEAM_0:0:47824702'
156
+ target_team = 'Blue'
157
+ value = '2'
158
+ weapon = 'degreaser'
159
+ healing = nil
160
+ crit = 'crit'
161
+ headshot = nil
162
+ expect(Events::Damage).to receive(:new).with(anything, player_name, player_uid, player_steam_id, player_team, target_name,
163
+ target_uid, target_steam_id, target_team, value, weapon, healing, crit, headshot)
112
164
  parse(line)
113
165
  end
114
166
 
@@ -311,6 +363,39 @@ module TF2LineParser
311
363
  parse(line)
312
364
  end
313
365
 
366
+ it 'recognizes round setup begin' do
367
+ line = 'L 04/22/2013 - 19:56:12: World triggered "Round_Setup_Begin"'
368
+ expect(Events::RoundSetupBegin).to receive(:new).with(anything)
369
+ parse(line)
370
+ end
371
+
372
+ it 'recognizes round setup end' do
373
+ line = 'L 04/22/2013 - 19:57:21: World triggered "Round_Setup_End"'
374
+ expect(Events::RoundSetupEnd).to receive(:new).with(anything)
375
+ parse(line)
376
+ end
377
+
378
+ it 'recognizes mini round start' do
379
+ line = 'L 04/22/2013 - 19:56:12: World triggered "Mini_Round_Start"'
380
+ expect(Events::MiniRoundStart).to receive(:new).with(anything)
381
+ parse(line)
382
+ end
383
+
384
+ it 'recognizes mini round selected' do
385
+ line = 'L 04/22/2013 - 19:56:12: World triggered "Mini_Round_Selected" (round "round_a")'
386
+ round = 'round_a'
387
+ expect(Events::MiniRoundSelected).to receive(:new).with(anything, round)
388
+ parse(line)
389
+ end
390
+
391
+ it 'recognizes intermission win limit' do
392
+ line = 'L 02/07/2013 - 21:52:41: Team "RED" triggered "Intermission_Win_Limit" due to mp_windifference'
393
+ team = 'RED'
394
+ reason = 'mp_windifference'
395
+ expect(Events::IntermissionWinLimit).to receive(:new).with(anything, team, reason)
396
+ parse(line)
397
+ end
398
+
314
399
  it 'recognizes ubercharges' do
315
400
  line = log_lines[1416]
316
401
  name = 'broder mirelin'
@@ -329,6 +414,106 @@ module TF2LineParser
329
414
  parse(line)
330
415
  end
331
416
 
417
+ it 'recognizes empty uber' do
418
+ line = 'L 02/02/2014 - 22:09:54: "Aquila<15><STEAM_0:0:43087158><Red>" triggered "empty_uber"'
419
+ name = 'Aquila'
420
+ uid = '15'
421
+ steam_id = 'STEAM_0:0:43087158'
422
+ team = 'Red'
423
+ expect(Events::EmptyUber).to receive(:new).with(anything, name, uid, steam_id, team)
424
+ parse(line)
425
+ end
426
+
427
+ it 'recognizes charge ready' do
428
+ line = 'L 02/02/2014 - 22:14:14: "flo ❤<24><STEAM_0:1:53945481><Blue>" triggered "chargeready"'
429
+ name = 'flo ❤'
430
+ uid = '24'
431
+ steam_id = 'STEAM_0:1:53945481'
432
+ team = 'Blue'
433
+ expect(Events::ChargeReady).to receive(:new).with(anything, name, uid, steam_id, team)
434
+ parse(line)
435
+ end
436
+
437
+ it 'recognizes charge ended' do
438
+ line = 'L 02/02/2014 - 22:14:27: "flo ❤<24><STEAM_0:1:53945481><Blue>" triggered "chargeended" (duration "6.3")'
439
+ name = 'flo ❤'
440
+ uid = '24'
441
+ steam_id = 'STEAM_0:1:53945481'
442
+ team = 'Blue'
443
+ duration = '6.3'
444
+ expect(Events::ChargeEnded).to receive(:new).with(anything, name, uid, steam_id, team, duration)
445
+ parse(line)
446
+ end
447
+
448
+ it 'recognizes first heal after spawn' do
449
+ line = 'L 02/02/2014 - 22:11:38: "Aquila<15><STEAM_0:0:43087158><Red>" triggered "first_heal_after_spawn" (time "54.7")'
450
+ name = 'Aquila'
451
+ uid = '15'
452
+ steam_id = 'STEAM_0:0:43087158'
453
+ team = 'Red'
454
+ heal_time = '54.7'
455
+ expect(Events::FirstHealAfterSpawn).to receive(:new).with(anything, name, uid, steam_id, team, heal_time)
456
+ parse(line)
457
+ end
458
+
459
+ it 'recognizes lost uber advantage' do
460
+ line = 'L 02/02/2014 - 22:16:50: "Aquila<15><STEAM_0:0:43087158><Red>" triggered "lost_uber_advantage" (time "12")'
461
+ name = 'Aquila'
462
+ uid = '15'
463
+ steam_id = 'STEAM_0:0:43087158'
464
+ team = 'Red'
465
+ advantage_time = '12'
466
+ expect(Events::LostUberAdvantage).to receive(:new).with(anything, name, uid, steam_id, team, advantage_time)
467
+ parse(line)
468
+ end
469
+
470
+ it 'recognizes built object' do
471
+ line = 'L 04/22/2013 - 19:56:20: "Overdosed /Charizard<22><STEAM_0:1:31473917><Red>" triggered "builtobject" (object "OBJ_TELEPORTER") (position "440 1249 576")'
472
+ name = 'Overdosed /Charizard'
473
+ uid = '22'
474
+ steam_id = 'STEAM_0:1:31473917'
475
+ team = 'Red'
476
+ object = 'OBJ_TELEPORTER'
477
+ expect(Events::BuiltObject).to receive(:new).with(anything, name, uid, steam_id, team, object)
478
+ parse(line)
479
+ end
480
+
481
+ it 'recognizes player extinguished' do
482
+ line = 'L 02/02/2014 - 22:28:51: "flo ❤<24><STEAM_0:1:53945481><Blue>" triggered "player_extinguished" against "splisplesplo<23><STEAM_0:1:38937830><Blue>" with "tf_weapon_medigun" (attacker_position "-1286 500 296") (victim_position "-1553 416 296")'
483
+ player_name = 'flo ❤'
484
+ player_uid = '24'
485
+ player_steam_id = 'STEAM_0:1:53945481'
486
+ player_team = 'Blue'
487
+ target_name = 'splisplesplo'
488
+ target_uid = '23'
489
+ target_steam_id = 'STEAM_0:1:38937830'
490
+ target_team = 'Blue'
491
+ weapon = 'tf_weapon_medigun'
492
+ expect(Events::PlayerExtinguished).to receive(:new).with(anything, player_name, player_uid, player_steam_id, player_team, target_name, target_uid, target_steam_id, target_team, weapon)
493
+ parse(line)
494
+ end
495
+
496
+ it 'recognizes joined team' do
497
+ line = 'L 02/07/2013 - 21:21:19: "Epsilon numlocked<4><STEAM_0:1:16347045><Unassigned>" joined team "Blue"'
498
+ name = 'Epsilon numlocked'
499
+ uid = '4'
500
+ steam_id = 'STEAM_0:1:16347045'
501
+ team = 'Unassigned'
502
+ team_name = 'Blue'
503
+ expect(Events::JoinedTeam).to receive(:new).with(anything, name, uid, steam_id, team, team_name)
504
+ parse(line)
505
+ end
506
+
507
+ it 'recognizes entered game' do
508
+ line = 'L 02/07/2013 - 21:21:16: "Epsilon numlocked<4><STEAM_0:1:16347045><>" entered the game'
509
+ name = 'Epsilon numlocked'
510
+ uid = '4'
511
+ steam_id = 'STEAM_0:1:16347045'
512
+ team = ''
513
+ expect(Events::EnteredGame).to receive(:new).with(anything, name, uid, steam_id, team)
514
+ parse(line)
515
+ end
516
+
332
517
  it 'recognizes medic deaths' do
333
518
  line = log_lines[1700]
334
519
  medic_name = 'broder mirelin'
@@ -411,6 +596,22 @@ module TF2LineParser
411
596
  parse(line)
412
597
  end
413
598
 
599
+ it 'recognizes killed object' do
600
+ line = 'L 12/30/2025 - 03:08:01: "poo<5><[U:1:435117887]><Red>" triggered "killedobject" (object "OBJ_SENTRYGUN") (weapon "obj_attachment_sapper") (objectowner "ck<24><[U:1:161147993]><Blue>") (attacker_position "-192 1630 1646")'
601
+ player_name = 'poo'
602
+ player_uid = '5'
603
+ player_steam_id = '[U:1:435117887]'
604
+ player_team = 'Red'
605
+ object = 'OBJ_SENTRYGUN'
606
+ weapon = 'obj_attachment_sapper'
607
+ objectowner_name = 'ck'
608
+ objectowner_uid = '24'
609
+ objectowner_steam_id = '[U:1:161147993]'
610
+ objectowner_team = 'Blue'
611
+ expect(Events::KilledObject).to receive(:new).with(anything, player_name, player_uid, player_steam_id, player_team, object, weapon, objectowner_name, objectowner_uid, objectowner_steam_id, objectowner_team)
612
+ parse(line)
613
+ end
614
+
414
615
  it 'recognizes spawns' do
415
616
  line = log_lines[4541]
416
617
  name = 'candyyou # Infinity Gaming'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tf2_line_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arie
@@ -96,8 +96,11 @@ files:
96
96
  - lib/tf2_line_parser.rb
97
97
  - lib/tf2_line_parser/events/airshot.rb
98
98
  - lib/tf2_line_parser/events/assist.rb
99
+ - lib/tf2_line_parser/events/built_object.rb
99
100
  - lib/tf2_line_parser/events/capture_block.rb
100
101
  - lib/tf2_line_parser/events/charge_deployed.rb
102
+ - lib/tf2_line_parser/events/charge_ended.rb
103
+ - lib/tf2_line_parser/events/charge_ready.rb
101
104
  - lib/tf2_line_parser/events/chat.rb
102
105
  - lib/tf2_line_parser/events/connect.rb
103
106
  - lib/tf2_line_parser/events/console_say.rb
@@ -105,16 +108,26 @@ files:
105
108
  - lib/tf2_line_parser/events/damage.rb
106
109
  - lib/tf2_line_parser/events/disconnect.rb
107
110
  - lib/tf2_line_parser/events/domination.rb
111
+ - lib/tf2_line_parser/events/empty_uber.rb
112
+ - lib/tf2_line_parser/events/entered_game.rb
108
113
  - lib/tf2_line_parser/events/event.rb
109
114
  - lib/tf2_line_parser/events/final_score.rb
115
+ - lib/tf2_line_parser/events/first_heal_after_spawn.rb
110
116
  - lib/tf2_line_parser/events/headshot_damage.rb
111
117
  - lib/tf2_line_parser/events/heal.rb
118
+ - lib/tf2_line_parser/events/intermission_win_limit.rb
119
+ - lib/tf2_line_parser/events/joined_team.rb
112
120
  - lib/tf2_line_parser/events/kill.rb
121
+ - lib/tf2_line_parser/events/killed_object.rb
122
+ - lib/tf2_line_parser/events/lost_uber_advantage.rb
113
123
  - lib/tf2_line_parser/events/match_end.rb
114
124
  - lib/tf2_line_parser/events/medic_death.rb
115
125
  - lib/tf2_line_parser/events/medic_death_ex.rb
126
+ - lib/tf2_line_parser/events/mini_round_selected.rb
127
+ - lib/tf2_line_parser/events/mini_round_start.rb
116
128
  - lib/tf2_line_parser/events/pickup_item.rb
117
129
  - lib/tf2_line_parser/events/player_action_event.rb
130
+ - lib/tf2_line_parser/events/player_extinguished.rb
118
131
  - lib/tf2_line_parser/events/point_capture.rb
119
132
  - lib/tf2_line_parser/events/pvp_event.rb
120
133
  - lib/tf2_line_parser/events/rcon_command.rb
@@ -123,6 +136,8 @@ files:
123
136
  - lib/tf2_line_parser/events/round_event_with_variables.rb
124
137
  - lib/tf2_line_parser/events/round_event_without_variables.rb
125
138
  - lib/tf2_line_parser/events/round_length.rb
139
+ - lib/tf2_line_parser/events/round_setup_begin.rb
140
+ - lib/tf2_line_parser/events/round_setup_end.rb
126
141
  - lib/tf2_line_parser/events/round_stalemate.rb
127
142
  - lib/tf2_line_parser/events/round_start.rb
128
143
  - lib/tf2_line_parser/events/round_win.rb