steam-condenser 1.3.5 → 1.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +228 -0
  3. data/CONTRIBUTING.md +59 -0
  4. data/Gemfile.lock +12 -13
  5. data/README.md +9 -4
  6. data/lib/steam-condenser/version.rb +1 -1
  7. data/lib/steam/community/alien_swarm/alien_swarm_mission.rb +10 -9
  8. data/lib/steam/community/alien_swarm/alien_swarm_stats.rb +74 -72
  9. data/lib/steam/community/css/css_map.rb +2 -2
  10. data/lib/steam/community/css/css_stats.rb +54 -56
  11. data/lib/steam/community/css/css_weapon.rb +4 -4
  12. data/lib/steam/community/game_item.rb +2 -3
  13. data/lib/steam/community/game_leaderboard.rb +22 -15
  14. data/lib/steam/community/l4d/abstract_l4d_stats.rb +64 -61
  15. data/lib/steam/community/l4d/l4d2_stats.rb +26 -21
  16. data/lib/steam/community/steam_id.rb +8 -11
  17. data/lib/steam/community/web_api.rb +19 -14
  18. data/lib/steam/packets/s2a_info2_packet.rb +16 -14
  19. data/lib/steam/packets/s2a_info_detailed_packet.rb +24 -19
  20. data/lib/steam/packets/steam_packet_factory.rb +7 -2
  21. data/lib/steam/servers/game_server.rb +3 -2
  22. data/lib/steam/servers/master_server.rb +1 -1
  23. data/lib/steam/sockets/source_socket.rb +4 -9
  24. data/pkg/steam-condenser-1.3.5.gem +0 -0
  25. data/pkg/steam-condenser-1.3.5/Gemfile +7 -0
  26. data/pkg/steam-condenser-1.3.5/Gemfile.lock +45 -0
  27. data/pkg/steam-condenser-1.3.5/LICENSE +25 -0
  28. data/pkg/steam-condenser-1.3.5/README.md +70 -0
  29. data/pkg/steam-condenser-1.3.5/Rakefile +46 -0
  30. data/pkg/steam-condenser-1.3.5/lib/core_ext/stringio.rb +91 -0
  31. data/pkg/steam-condenser-1.3.5/lib/errors/packet_format_error.rb +13 -0
  32. data/pkg/steam-condenser-1.3.5/lib/errors/rcon_ban_error.rb +22 -0
  33. data/pkg/steam-condenser-1.3.5/lib/errors/rcon_no_auth_error.rb +21 -0
  34. data/pkg/steam-condenser-1.3.5/lib/errors/steam_condenser_error.rb +26 -0
  35. data/pkg/steam-condenser-1.3.5/lib/errors/timeout_error.rb +28 -0
  36. data/pkg/steam-condenser-1.3.5/lib/errors/web_api_error.rb +57 -0
  37. data/pkg/steam-condenser-1.3.5/lib/steam-condenser.rb +18 -0
  38. data/pkg/steam-condenser-1.3.5/lib/steam-condenser/community.rb +24 -0
  39. data/pkg/steam-condenser-1.3.5/lib/steam-condenser/servers.rb +24 -0
  40. data/pkg/steam-condenser-1.3.5/lib/steam-condenser/version.rb +11 -0
  41. data/pkg/steam-condenser-1.3.5/lib/steam/community/alien_swarm/alien_swarm_mission.rb +119 -0
  42. data/pkg/steam-condenser-1.3.5/lib/steam/community/alien_swarm/alien_swarm_stats.rb +186 -0
  43. data/pkg/steam-condenser-1.3.5/lib/steam/community/alien_swarm/alien_swarm_weapon.rb +49 -0
  44. data/pkg/steam-condenser-1.3.5/lib/steam/community/app_news.rb +133 -0
  45. data/pkg/steam-condenser-1.3.5/lib/steam/community/cacheable.rb +199 -0
  46. data/pkg/steam-condenser-1.3.5/lib/steam/community/css/css_map.rb +61 -0
  47. data/pkg/steam-condenser-1.3.5/lib/steam/community/css/css_stats.rb +142 -0
  48. data/pkg/steam-condenser-1.3.5/lib/steam/community/css/css_weapon.rb +69 -0
  49. data/pkg/steam-condenser-1.3.5/lib/steam/community/defense_grid/defense_grid_stats.rb +238 -0
  50. data/pkg/steam-condenser-1.3.5/lib/steam/community/dods/dods_class.rb +90 -0
  51. data/pkg/steam-condenser-1.3.5/lib/steam/community/dods/dods_stats.rb +62 -0
  52. data/pkg/steam-condenser-1.3.5/lib/steam/community/dods/dods_weapon.rb +67 -0
  53. data/pkg/steam-condenser-1.3.5/lib/steam/community/dota2/dota2_beta_inventory.rb +30 -0
  54. data/pkg/steam-condenser-1.3.5/lib/steam/community/dota2/dota2_inventory.rb +30 -0
  55. data/pkg/steam-condenser-1.3.5/lib/steam/community/dota2/dota2_item.rb +33 -0
  56. data/pkg/steam-condenser-1.3.5/lib/steam/community/game_achievement.rb +109 -0
  57. data/pkg/steam-condenser-1.3.5/lib/steam/community/game_class.rb +22 -0
  58. data/pkg/steam-condenser-1.3.5/lib/steam/community/game_inventory.rb +171 -0
  59. data/pkg/steam-condenser-1.3.5/lib/steam/community/game_item.rb +156 -0
  60. data/pkg/steam-condenser-1.3.5/lib/steam/community/game_item_schema.rb +131 -0
  61. data/pkg/steam-condenser-1.3.5/lib/steam/community/game_leaderboard.rb +205 -0
  62. data/pkg/steam-condenser-1.3.5/lib/steam/community/game_leaderboard_entry.rb +43 -0
  63. data/pkg/steam-condenser-1.3.5/lib/steam/community/game_stats.rb +175 -0
  64. data/pkg/steam-condenser-1.3.5/lib/steam/community/game_weapon.rb +41 -0
  65. data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/abstract_l4d_stats.rb +185 -0
  66. data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/abstract_l4d_weapon.rb +56 -0
  67. data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d2_map.rb +90 -0
  68. data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d2_stats.rb +174 -0
  69. data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d2_weapon.rb +38 -0
  70. data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d_explosive.rb +34 -0
  71. data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d_map.rb +65 -0
  72. data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d_stats.rb +73 -0
  73. data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d_weapon.rb +26 -0
  74. data/pkg/steam-condenser-1.3.5/lib/steam/community/portal2/portal2_inventory.rb +30 -0
  75. data/pkg/steam-condenser-1.3.5/lib/steam/community/portal2/portal2_item.rb +55 -0
  76. data/pkg/steam-condenser-1.3.5/lib/steam/community/portal2/portal2_stats.rb +33 -0
  77. data/pkg/steam-condenser-1.3.5/lib/steam/community/steam_game.rb +193 -0
  78. data/pkg/steam-condenser-1.3.5/lib/steam/community/steam_group.rb +129 -0
  79. data/pkg/steam-condenser-1.3.5/lib/steam/community/steam_id.rb +498 -0
  80. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_beta_inventory.rb +28 -0
  81. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_class.rb +92 -0
  82. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_class_factory.rb +40 -0
  83. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_engineer.rb +43 -0
  84. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_golden_wrench.rb +70 -0
  85. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_inventory.rb +30 -0
  86. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_item.rb +55 -0
  87. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_medic.rb +35 -0
  88. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_sniper.rb +28 -0
  89. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_spy.rb +41 -0
  90. data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_stats.rb +77 -0
  91. data/pkg/steam-condenser-1.3.5/lib/steam/community/web_api.rb +130 -0
  92. data/pkg/steam-condenser-1.3.5/lib/steam/community/xml_data.rb +27 -0
  93. data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2m_get_servers_batch2_packet.rb +59 -0
  94. data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2s_info_packet.rb +24 -0
  95. data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2s_player_packet.rb +31 -0
  96. data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2s_rules_packet.rb +32 -0
  97. data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2s_serverquery_getchallenge_packet.rb +25 -0
  98. data/pkg/steam-condenser-1.3.5/lib/steam/packets/c2m_checkmd5_packet.rb +31 -0
  99. data/pkg/steam-condenser-1.3.5/lib/steam/packets/m2a_server_batch_packet.rb +52 -0
  100. data/pkg/steam-condenser-1.3.5/lib/steam/packets/m2c_isvalidmd5_packet.rb +34 -0
  101. data/pkg/steam-condenser-1.3.5/lib/steam/packets/m2s_requestrestart_packet.rb +34 -0
  102. data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_auth_request.rb +28 -0
  103. data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_auth_response.rb +30 -0
  104. data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_exec_request.rb +28 -0
  105. data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_exec_response.rb +37 -0
  106. data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_goldsrc_request.rb +35 -0
  107. data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_goldsrc_response.rb +34 -0
  108. data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_packet.rb +57 -0
  109. data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_packet_factory.rb +43 -0
  110. data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_terminator.rb +29 -0
  111. data/pkg/steam-condenser-1.3.5/lib/steam/packets/request_with_challenge.rb +19 -0
  112. data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_info2_packet.rb +74 -0
  113. data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_info_base_packet.rb +25 -0
  114. data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_info_detailed_packet.rb +59 -0
  115. data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_logstring_packet.rb +30 -0
  116. data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_player_packet.rb +44 -0
  117. data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_rules_packet.rb +48 -0
  118. data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2c_challenge_packet.rb +35 -0
  119. data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2m_heartbeat2_packet.rb +72 -0
  120. data/pkg/steam-condenser-1.3.5/lib/steam/packets/steam_packet.rb +52 -0
  121. data/pkg/steam-condenser-1.3.5/lib/steam/packets/steam_packet_factory.rb +108 -0
  122. data/pkg/steam-condenser-1.3.5/lib/steam/servers/game_server.rb +392 -0
  123. data/pkg/steam-condenser-1.3.5/lib/steam/servers/goldsrc_server.rb +74 -0
  124. data/pkg/steam-condenser-1.3.5/lib/steam/servers/master_server.rb +188 -0
  125. data/pkg/steam-condenser-1.3.5/lib/steam/servers/server.rb +115 -0
  126. data/pkg/steam-condenser-1.3.5/lib/steam/servers/source_server.rb +117 -0
  127. data/pkg/steam-condenser-1.3.5/lib/steam/sockets/goldsrc_socket.rb +142 -0
  128. data/pkg/steam-condenser-1.3.5/lib/steam/sockets/master_server_socket.rb +34 -0
  129. data/pkg/steam-condenser-1.3.5/lib/steam/sockets/rcon_socket.rb +103 -0
  130. data/pkg/steam-condenser-1.3.5/lib/steam/sockets/source_socket.rb +78 -0
  131. data/pkg/steam-condenser-1.3.5/lib/steam/sockets/steam_socket.rb +91 -0
  132. data/pkg/steam-condenser-1.3.5/lib/steam/steam_player.rb +143 -0
  133. data/pkg/steam-condenser-1.3.5/steam-condenser.gemspec +26 -0
  134. data/pkg/steam-condenser-1.3.5/test/core_ext/test_stringio.rb +59 -0
  135. data/pkg/steam-condenser-1.3.5/test/fixtures/invalid.xml +2 -0
  136. data/pkg/steam-condenser-1.3.5/test/fixtures/sonofthor.xml +882 -0
  137. data/pkg/steam-condenser-1.3.5/test/fixtures/status_goldsrc +3 -0
  138. data/pkg/steam-condenser-1.3.5/test/fixtures/status_source +3 -0
  139. data/pkg/steam-condenser-1.3.5/test/fixtures/valve-members.xml +231 -0
  140. data/pkg/steam-condenser-1.3.5/test/helper.rb +48 -0
  141. data/pkg/steam-condenser-1.3.5/test/steam/community/test_cacheable.rb +100 -0
  142. data/pkg/steam-condenser-1.3.5/test/steam/community/test_steam_group.rb +83 -0
  143. data/pkg/steam-condenser-1.3.5/test/steam/community/test_steam_id.rb +144 -0
  144. data/pkg/steam-condenser-1.3.5/test/steam/community/test_web_api.rb +98 -0
  145. data/pkg/steam-condenser-1.3.5/test/steam/packets/test_steam_packet.rb +37 -0
  146. data/pkg/steam-condenser-1.3.5/test/steam/servers/test_game_server.rb +296 -0
  147. data/pkg/steam-condenser-1.3.5/test/steam/servers/test_goldsrc_server.rb +59 -0
  148. data/pkg/steam-condenser-1.3.5/test/steam/servers/test_master_server.rb +131 -0
  149. data/pkg/steam-condenser-1.3.5/test/steam/servers/test_server.rb +72 -0
  150. data/pkg/steam-condenser-1.3.5/test/steam/servers/test_source_server.rb +134 -0
  151. data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_goldsrc_socket.rb +127 -0
  152. data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_master_server_socket.rb +42 -0
  153. data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_rcon_socket.rb +118 -0
  154. data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_source_socket.rb +77 -0
  155. data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_steam_socket.rb +97 -0
  156. data/steam-condenser.gemspec +2 -3
  157. data/test/steam/community/test_cacheable.rb +3 -0
  158. data/test/steam/community/test_web_api.rb +15 -2
  159. data/test/steam/packets/test_steam_packet.rb +1 -1
  160. data/test/steam/sockets/test_source_socket.rb +1 -1
  161. metadata +151 -27
@@ -1,7 +1,7 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under
2
2
  # the terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2010-2011, Sebastian Staudt
4
+ # Copyright (c) 2010-2013, Sebastian Staudt
5
5
 
6
6
  # Represents the stats for a Counter-Strike: Source map for a specific user
7
7
  #
@@ -34,7 +34,7 @@ class CSSMap
34
34
  # @param [String] map_name The name of the map
35
35
  # @param [Hash<String, Object>] maps_data The XML data of all maps
36
36
  def initialize(map_name, maps_data)
37
- @name = map_name
37
+ @name = map_name
38
38
 
39
39
  @favorite = (maps_data['favorite'] == @name)
40
40
  @rounds_played = maps_data["#{@name}_rounds"].to_i
@@ -13,16 +13,14 @@ require 'steam/community/css/css_weapon'
13
13
  class CSSStats < GameStats
14
14
 
15
15
  # The names of the maps in Counter-Strike: Source
16
- MAPS = [ 'cs_assault', 'cs_compound', 'cs_havana', 'cs_italy', 'cs_militia',
17
- 'cs_office', 'de_aztec', 'de_cbble', 'de_chateau', 'de_dust',
18
- 'de_dust2', 'de_inferno', 'de_nuke', 'de_piranesi', 'de_port',
19
- 'de_prodigy', 'de_tides', 'de_train' ]
16
+ MAPS = %w(cs_assault cs_compound cs_havana cs_italy cs_militia cs_office
17
+ de_aztec de_cbble de_chateau de_dust de_dust2 de_inferno de_nuke
18
+ de_piranesi de_port de_prodigy de_tides de_train)
20
19
 
21
20
  # The names of the weapons in Counter-Strike: Source
22
- WEAPONS = [ 'deagle', 'usp', 'glock', 'p228', 'elite', 'fiveseven', 'awp',
23
- 'ak47', 'm4a1', 'aug', 'sg552', 'sg550', 'galil', 'famas',
24
- 'scout', 'g3sg1', 'p90', 'mp5navy', 'tmp', 'mac10', 'ump45',
25
- 'm3', 'xm1014', 'm249', 'knife', 'grenade' ]
21
+ WEAPONS = %w(deagle usp glock p228 elite fiveseven awp ak47 m4a1 aug sg552
22
+ sg550 galil famas scout g3sg1 p90 mp5navy tmp mac10 ump45 m3
23
+ xm1014 m249 knife grenade)
26
24
 
27
25
  # Returns statistics about the last match the player played
28
26
  #
@@ -48,54 +46,54 @@ class CSSStats < GameStats
48
46
  lifetime_data = @xml_data['stats']['lifetime']
49
47
  summary_data = @xml_data['stats']['summary']
50
48
 
51
- @last_match_stats = {}
52
- @total_stats = {}
53
-
54
- @last_match_stats[:cost_per_kill] = last_match_data['costkill'].to_f
55
- @last_match_stats[:ct_wins] = last_match_data['ct_wins'].to_i
56
- @last_match_stats[:damage] = last_match_data['dmg'].to_i
57
- @last_match_stats[:deaths] = last_match_data['deaths'].to_i
58
- @last_match_stats[:dominations] = last_match_data['dominations'].to_i
59
- @last_match_stats[:favorite_weapon_id] = last_match_data['favwpnid'].to_i
60
- @last_match_stats[:kills] = last_match_data['kills'].to_i
61
- @last_match_stats[:max_players] = last_match_data['max_players'].to_i
62
- @last_match_stats[:money] = last_match_data['money'].to_i
63
- @last_match_stats[:revenges] = last_match_data['revenges'].to_i
64
- @last_match_stats[:stars] = last_match_data['stars'].to_i
65
- @last_match_stats[:t_wins] = last_match_data['t_wins'].to_i
66
- @last_match_stats[:wins] = last_match_data['wins'].to_i
67
-
68
- @total_stats[:blind_kills] = lifetime_data['blindkills'].to_i
69
- @total_stats[:bombs_defused] = lifetime_data['bombsdefused'].to_i
70
- @total_stats[:bombs_planted] = lifetime_data['bombsplanted'].to_i
71
- @total_stats[:damage] = lifetime_data['dmg'].to_i
72
- @total_stats[:deaths] = summary_data['deaths'].to_i
73
- @total_stats[:domination_overkills] = lifetime_data['dominationoverkills'].to_i
74
- @total_stats[:dominations] = lifetime_data['dominations'].to_i
75
- @total_stats[:earned_money] = lifetime_data['money'].to_i
76
- @total_stats[:enemy_weapon_kills] = lifetime_data['enemywpnkills'].to_i
77
- @total_stats[:headshots] = lifetime_data['headshots'].to_i
78
- @total_stats[:hits] = summary_data['shotshit'].to_i
79
- @total_stats[:hostages_rescued] = lifetime_data['hostagesrescued'].to_i
80
- @total_stats[:kills] = summary_data['kills'].to_i
81
- @total_stats[:knife_kills] = lifetime_data['knifekills'].to_i
82
- @total_stats[:logos_sprayed] = lifetime_data['decals'].to_i
83
- @total_stats[:nightvision_damage] = lifetime_data['nvgdmg'].to_i
84
- @total_stats[:pistol_rounds_won] = lifetime_data['pistolrounds'].to_i
85
- @total_stats[:revenges] = lifetime_data['revenges'].to_i
86
- @total_stats[:rounds_played] = summary_data['rounds'].to_i
87
- @total_stats[:rounds_won] = summary_data['wins'].to_i
88
- @total_stats[:seconds_played] = summary_data['timeplayed'].to_i
89
- @total_stats[:shots] = summary_data['shots'].to_i
90
- @total_stats[:stars] = summary_data['stars'].to_i
91
- @total_stats[:weapons_donated] = lifetime_data['wpndonated'].to_i
92
- @total_stats[:windows_broken] = lifetime_data['winbroken'].to_i
93
- @total_stats[:zoomed_sniper_kills] = lifetime_data['zsniperkills'].to_i
94
-
95
- @last_match_stats[:kdratio] = (@total_stats[:deaths] > 0) ? @last_match_stats[:kills].to_f / @last_match_stats[:deaths] : 0
96
- @total_stats[:accuracy] = (@total_stats[:shots] > 0) ? @total_stats[:hits].to_f / @total_stats[:shots] : 0
97
- @total_stats[:kdratio] = (@total_stats[:deaths] > 0) ? @total_stats[:kills].to_f / @total_stats[:deaths] : 0
98
- @total_stats[:rounds_lost] = @total_stats[:rounds_played] - @total_stats[:rounds_won]
49
+ @last_match_stats = {
50
+ :cost_per_kill => last_match_data['costkill'].to_f,
51
+ :ct_wins => last_match_data['ct_wins'].to_i,
52
+ :damage => last_match_data['dmg'].to_i,
53
+ :deaths => last_match_data['deaths'].to_i,
54
+ :dominations => last_match_data['dominations'].to_i,
55
+ :favorite_weapon_id => last_match_data['favwpnid'].to_i,
56
+ :kills => last_match_data['kills'].to_i,
57
+ :max_players => last_match_data['max_players'].to_i,
58
+ :money => last_match_data['money'].to_i,
59
+ :revenges => last_match_data['revenges'].to_i,
60
+ :stars => last_match_data['stars'].to_i,
61
+ :t_wins => last_match_data['t_wins'].to_i,
62
+ :wins => last_match_data['wins'].to_i,
63
+ }
64
+
65
+ @total_stats = {
66
+ :blind_kills => lifetime_data['blindkills'].to_i,
67
+ :bombs_defused => lifetime_data['bombsdefused'].to_i,
68
+ :bombs_planted => lifetime_data['bombsplanted'].to_i,
69
+ :damage => lifetime_data['dmg'].to_i,
70
+ :deaths => summary_data['deaths'].to_i,
71
+ :domination_overkills => lifetime_data['dominationoverkills'].to_i,
72
+ :dominations => lifetime_data['dominations'].to_i,
73
+ :earned_money => lifetime_data['money'].to_i,
74
+ :enemy_weapon_kills => lifetime_data['enemywpnkills'].to_i,
75
+ :headshots => lifetime_data['headshots'].to_i,
76
+ :hits => summary_data['shotshit'].to_i,
77
+ :hostages_rescued => lifetime_data['hostagesrescued'].to_i,
78
+ :kills => summary_data['kills'].to_i,
79
+ :knife_kills => lifetime_data['knifekills'].to_i,
80
+ :logos_sprayed => lifetime_data['decals'].to_i,
81
+ :nightvision_damage => lifetime_data['nvgdmg'].to_i,
82
+ :pistol_rounds_won => lifetime_data['pistolrounds'].to_i,
83
+ :revenges => lifetime_data['revenges'].to_i,
84
+ :rounds_played => summary_data['rounds'].to_i,
85
+ :rounds_won => summary_data['wins'].to_i,
86
+ :seconds_played => summary_data['timeplayed'].to_i,
87
+ :shots => summary_data['shots'].to_i,
88
+ :stars => summary_data['stars'].to_i,
89
+ :weapons_donated => lifetime_data['wpndonated'].to_i,
90
+ :windows_broken => lifetime_data['winbroken'].to_i,
91
+ :zoomed_sniper_kills => lifetime_data['zsniperkills'].to_i,
92
+ :kdratio => (@total_stats[:deaths] > 0) ? @last_match_stats[:kills].to_f / @last_match_stats[:deaths] : 0,
93
+ :accuracy => (@total_stats[:shots] > 0) ? @total_stats[:hits].to_f / @total_stats[:shots] : 0,
94
+ :kdratio => (@total_stats[:deaths] > 0) ? @total_stats[:kills].to_f / @total_stats[:deaths] : 0,
95
+ :rounds_lost => @total_stats[:rounds_played] - @total_stats[:rounds_won]
96
+ }
99
97
  end
100
98
  end
101
99
 
@@ -1,7 +1,7 @@
1
1
  # This code is free software; you can redistribute it and/or modify it under
2
2
  # the terms of the new BSD License.
3
3
  #
4
- # Copyright (c) 2010-2011, Sebastian Staudt
4
+ # Copyright (c) 2010-2013, Sebastian Staudt
5
5
 
6
6
  # Represents the stats for a Counter-Strike: Source weapon for a specific user
7
7
  #
@@ -34,14 +34,14 @@ class CSSWeapon
34
34
  # @param [String] weapon_name The name of the weapon
35
35
  # @param [Hash<String, Object>] weapons_data The XML data of all weapons
36
36
  def initialize(weapon_name, weapons_data)
37
- @name = weapon_name
37
+ @name = weapon_name
38
38
 
39
39
  @favorite = (weapons_data['favorite'] == @name)
40
40
  @kills = weapons_data["#{@name}_kills"].to_i
41
41
 
42
42
  if @name != 'grenade' && @name != 'knife'
43
- @hits = weapons_data["#{@name}_hits"].to_i
44
- @shots = weapons_data["#{@name}_shots"].to_i
43
+ @hits = weapons_data["#{@name}_hits"].to_i
44
+ @shots = weapons_data["#{@name}_shots"].to_i
45
45
  end
46
46
  end
47
47
 
@@ -23,7 +23,7 @@ module GameItem
23
23
 
24
24
  # Returns the number of items the player owns of this item
25
25
  #
26
- # @return [Fixnum] The quanitity of this item
26
+ # @return [Fixnum] The quantity of this item
27
27
  attr_reader :count
28
28
 
29
29
  # Returns the index where the item is defined in the schema
@@ -112,8 +112,7 @@ module GameItem
112
112
 
113
113
  @attributes = []
114
114
  attributes_data.each do |attribute_data|
115
- attribute_key = attribute_data[:defindex]
116
- attribute_key = attribute_data[:name] if attribute_key.nil?
115
+ attribute_key = attribute_data[:defindex] || attribute_data[:name]
117
116
 
118
117
  unless attribute_key.nil?
119
118
  schema_attribute_data = inventory.item_schema.attributes[attribute_key]
@@ -16,14 +16,14 @@ class GameLeaderboard
16
16
 
17
17
  include XMLData
18
18
 
19
- LEADERBOARD_DISPLAY_TYPE_NONE = 0
20
- LEADERBOARD_DISPLAY_TYPE_NUMERIC = 1
21
- LEADERBOARD_DISPLAY_TYPE_SECONDS = 2
22
- LEADERBOARD_DISPLAY_TYPE_MILLISECONDS = 3
19
+ DISPLAY_TYPE_NONE = 0
20
+ DISPLAY_TYPE_NUMERIC = 1
21
+ DISPLAY_TYPE_SECONDS = 2
22
+ DISPLAY_TYPE_MILLISECONDS = 3
23
23
 
24
- LEADERBOARD_SORT_METHOD_NONE = 0
25
- LEADERBOARD_SORT_METHOD_ASC = 1
26
- LEADERBOARD_SORT_METHOD_DESC = 2
24
+ SORT_METHOD_NONE = 0
25
+ SORT_METHOD_ASC = 1
26
+ SORT_METHOD_DESC = 2
27
27
 
28
28
  @@leaderboards = {}
29
29
 
@@ -120,13 +120,7 @@ class GameLeaderboard
120
120
  error = @xml_data['error']
121
121
  raise SteamCondenserError, error unless error.nil?
122
122
 
123
- entries = []
124
- @xml_data['entries']['entry'].each do |entry_data|
125
- rank = entry_data['rank'].to_i
126
- entries[rank] = GameLeaderboardEntry.new entry_data, self
127
- end
128
-
129
- entries
123
+ parse_entries
130
124
  end
131
125
 
132
126
  # Returns the entries on this leaderboard for a given rank range
@@ -162,7 +156,7 @@ class GameLeaderboard
162
156
  entries[rank] = GameLeaderboardEntry.new entry_data, self
163
157
  end
164
158
 
165
- entries
159
+ parse_entries
166
160
  end
167
161
 
168
162
  private
@@ -179,6 +173,19 @@ class GameLeaderboard
179
173
  @display_type = board_data['displaytype'].to_i
180
174
  end
181
175
 
176
+ # Parses all entries available in the XML data
177
+ #
178
+ # @return [Array<GameLeaderboardEntry>] All available entries
179
+ def parse_entries
180
+ entries = []
181
+ @xml_data['entries']['entry'].each do |entry_data|
182
+ entries[entry_data['rank'].to_i] =
183
+ GameLeaderboardEntry.new entry_data, self
184
+ end
185
+
186
+ entries
187
+ end
188
+
182
189
  # Loads the leaderboards of the specified games into the cache
183
190
  #
184
191
  # @param [String] game_name The short name of the game
@@ -31,13 +31,12 @@ module AbstractL4DStats
31
31
  if public?
32
32
  most_recent_game_data = @xml_data['stats']['mostrecentgame']
33
33
 
34
- @most_recent_game = {}
35
- unless most_recent_game_data.nil?
36
- @most_recent_game[:difficulty] = most_recent_game_data['difficulty']
37
- @most_recent_game[:escaped] = (most_recent_game_data['bEscaped'] == 1)
38
- @most_recent_game[:movie] = most_recent_game_data['movie']
39
- @most_recent_game[:time_played] = most_recent_game_data['time']
40
- end
34
+ @most_recent_game = most_recent_game_data.nil? ? {} : {
35
+ :difficulty => most_recent_game_data['difficulty'],
36
+ :escaped => (most_recent_game_data['bEscaped'] == 1),
37
+ :movie => most_recent_game_data['movie'],
38
+ :time_played => most_recent_game_data['time']
39
+ }
41
40
  end
42
41
  end
43
42
 
@@ -52,15 +51,16 @@ module AbstractL4DStats
52
51
  if @favorites.nil?
53
52
  favorites_data = @xml_data['stats']['favorites']
54
53
 
55
- @favorites = {}
56
- @favorites[:campaign] = favorites_data['campaign']
57
- @favorites[:campaign_percentage] = favorites_data['campaignpct'].to_i
58
- @favorites[:character] = favorites_data['character']
59
- @favorites[:character_percentage] = favorites_data['characterpct'].to_i
60
- @favorites[:level1_weapon] = favorites_data['weapon1']
61
- @favorites[:level1_weapon_percentage] = favorites_data['weapon1pct'].to_i
62
- @favorites[:level2_weapon] = favorites_data['weapon2']
63
- @favorites[:level2_weapon_percentage] = favorites_data['weapon2pct'].to_i
54
+ @favorites = {
55
+ :campaign => favorites_data['campaign'],
56
+ :campaign_percentage => favorites_data['campaignpct'].to_i,
57
+ :character => favorites_data['character'],
58
+ :character_percentage => favorites_data['characterpct'].to_i,
59
+ :level1_weapon => favorites_data['weapon1'],
60
+ :level1_weapon_percentage => favorites_data['weapon1pct'].to_i,
61
+ :level2_weapon => favorites_data['weapon2'],
62
+ :level2_weapon_percentage => favorites_data['weapon2pct'].to_i
63
+ }
64
64
  end
65
65
 
66
66
  @favorites
@@ -78,18 +78,18 @@ module AbstractL4DStats
78
78
  if @lifetime_stats.nil?
79
79
  lifetime_data = @xml_data['stats']['lifetime']
80
80
 
81
- @lifetime_stats = {}
82
- @lifetime_stats[:finales_survived] = lifetime_data['finales'].to_i
83
- @lifetime_stats[:games_played] = lifetime_data['gamesplayed'].to_i
84
- @lifetime_stats[:infected_killed] = lifetime_data['infectedkilled'].to_i
85
- @lifetime_stats[:kills_per_hour] = lifetime_data['killsperhour'].to_f
86
- @lifetime_stats[:avg_kits_shared] = lifetime_data['kitsshared'].to_f
87
- @lifetime_stats[:avg_kits_used] = lifetime_data['kitsused'].to_f
88
- @lifetime_stats[:avg_pills_shared] = lifetime_data['pillsshared'].to_f
89
- @lifetime_stats[:avg_pills_used] = lifetime_data['pillsused'].to_f
90
- @lifetime_stats[:time_played] = lifetime_data['timeplayed']
91
-
92
- @lifetime_stats[:finales_survived_percentage] = @lifetime_stats[:finales_survived].to_f / @lifetime_stats[:games_played]
81
+ @lifetime_stats = {
82
+ :finales_survived => lifetime_data['finales'].to_i,
83
+ :games_played => lifetime_data['gamesplayed'].to_i,
84
+ :infected_killed => lifetime_data['infectedkilled'].to_i,
85
+ :kills_per_hour => lifetime_data['killsperhour'].to_f,
86
+ :avg_kits_shared => lifetime_data['kitsshared'].to_f,
87
+ :avg_kits_used => lifetime_data['kitsused'].to_f,
88
+ :avg_pills_shared => lifetime_data['pillsshared'].to_f,
89
+ :avg_pills_used => lifetime_data['pillsused'].to_f,
90
+ :time_played => lifetime_data['timeplayed'],
91
+ :finales_survived_percentage => @lifetime_stats[:finales_survived].to_f / @lifetime_stats[:games_played]
92
+ }
93
93
  end
94
94
 
95
95
  @lifetime_stats
@@ -107,12 +107,13 @@ module AbstractL4DStats
107
107
  if @survival_stats.nil?
108
108
  survival_data = @xml_data['stats']['survival']
109
109
 
110
- @survival_stats = {}
111
- @survival_stats[:gold_medals] = survival_data['goldmedals'].to_i
112
- @survival_stats[:silver_medals] = survival_data['silvermedals'].to_i
113
- @survival_stats[:bronze_medals] = survival_data['bronzemedals'].to_i
114
- @survival_stats[:rounds_played] = survival_data['roundsplayed'].to_i
115
- @survival_stats[:best_time] = survival_data['besttime'].to_f
110
+ @survival_stats = {
111
+ :gold_medals => survival_data['goldmedals'].to_i,
112
+ :silver_medals => survival_data['silvermedals'].to_i,
113
+ :bronze_medals => survival_data['bronzemedals'].to_i,
114
+ :rounds_played => survival_data['roundsplayed'].to_i,
115
+ :best_time => survival_data['besttime'].to_f
116
+ }
116
117
  end
117
118
 
118
119
  @survival_stats
@@ -130,18 +131,19 @@ module AbstractL4DStats
130
131
  if @teamplay_stats.nil?
131
132
  teamplay_data = @xml_data['stats']['teamplay']
132
133
 
133
- @teamplay_stats = {}
134
- @teamplay_stats[:revived] = teamplay_data['revived'].to_i
135
- @teamplay_stats[:most_revived_difficulty] = teamplay_data['reviveddiff']
136
- @teamplay_stats[:avg_revived] = teamplay_data['revivedavg'].to_f
137
- @teamplay_stats[:avg_was_revived] = teamplay_data['wasrevivedavg'].to_f
138
- @teamplay_stats[:protected] = teamplay_data['protected'].to_i
139
- @teamplay_stats[:most_protected_difficulty] = teamplay_data['protecteddiff']
140
- @teamplay_stats[:avg_protected] = teamplay_data['protectedavg'].to_f
141
- @teamplay_stats[:avg_was_protected] = teamplay_data['wasprotectedavg'].to_f
142
- @teamplay_stats[:friendly_fire_damage] = teamplay_data['ffdamage'].to_i
143
- @teamplay_stats[:most_friendly_fire_difficulty] = teamplay_data['ffdamagediff']
144
- @teamplay_stats[:avg_friendly_fire_damage] = teamplay_data['ffdamageavg'].to_f
134
+ @teamplay_stats = {
135
+ :revived => teamplay_data['revived'].to_i,
136
+ :most_revived_difficulty => teamplay_data['reviveddiff'],
137
+ :avg_revived => teamplay_data['revivedavg'].to_f,
138
+ :avg_was_revived => teamplay_data['wasrevivedavg'].to_f,
139
+ :protected => teamplay_data['protected'].to_i,
140
+ :most_protected_difficulty => teamplay_data['protecteddiff'],
141
+ :avg_protected => teamplay_data['protectedavg'].to_f,
142
+ :avg_was_protected => teamplay_data['wasprotectedavg'].to_f,
143
+ :friendly_fire_damage => teamplay_data['ffdamage'].to_i,
144
+ :most_friendly_fire_difficulty => teamplay_data['ffdamagediff'],
145
+ :avg_friendly_fire_damage => teamplay_data['ffdamageavg'].to_f
146
+ }
145
147
  end
146
148
 
147
149
  @teamplay_stats
@@ -159,23 +161,24 @@ module AbstractL4DStats
159
161
  if @versus_stats.nil?
160
162
  versus_data = @xml_data['stats']['versus']
161
163
 
162
- @versus_stats = {}
163
- @versus_stats[:games_played] = versus_data['gamesplayed'].to_i
164
- @versus_stats[:games_completed] = versus_data['gamescompleted'].to_i
165
- @versus_stats[:finales_survived] = versus_data['finales'].to_i
166
- @versus_stats[:points] = versus_data['points'].to_i
167
- @versus_stats[:most_points_infected] = versus_data['pointsas']
168
- @versus_stats[:games_won] = versus_data['gameswon'].to_i
169
- @versus_stats[:games_lost] = versus_data['gameslost'].to_i
170
- @versus_stats[:highest_survivor_score] = versus_data['survivorscore'].to_i
171
-
172
- @versus_stats[:finales_survived_percentage] = @versus_stats[:finales_survived].to_f / @versus_stats[:games_played]
164
+ @versus_stats = {
165
+ :games_played => versus_data['gamesplayed'].to_i,
166
+ :games_completed => versus_data['gamescompleted'].to_i,
167
+ :finales_survived => versus_data['finales'].to_i,
168
+ :points => versus_data['points'].to_i,
169
+ :most_points_infected => versus_data['pointsas'],
170
+ :games_won => versus_data['gameswon'].to_i,
171
+ :games_lost => versus_data['gameslost'].to_i,
172
+ :highest_survivor_score => versus_data['survivorscore'].to_i,
173
+ :finales_survived_percentage => @versus_stats[:finales_survived].to_f / @versus_stats[:games_played]
174
+ }
173
175
 
174
176
  self.class.const_get(:SPECIAL_INFECTED).each do |infected|
175
- @versus_stats[infected] = {}
176
- @versus_stats[infected][:special_attacks] = versus_data["#{infected}special"].to_i
177
- @versus_stats[infected][:most_damage] = versus_data["#{infected}dmg"].to_i
178
- @versus_stats[infected]['avg_lifespan'] = versus_data["#{infected}lifespan"].to_i
177
+ @versus_stats[infected] = {
178
+ :special_attacks => versus_data["#{infected}special"].to_i,
179
+ :most_damage => versus_data["#{infected}dmg"].to_i,
180
+ :avg_lifespan => versus_data["#{infected}lifespan"].to_i
181
+ }
179
182
  end
180
183
  end
181
184
 
@@ -62,9 +62,11 @@ class L4D2Stats < GameStats
62
62
  super
63
63
 
64
64
  lifetime_data = @xml_data['stats']['lifetime']
65
- @lifetime_stats[:avg_adrenaline_shared] = lifetime_data['adrenalineshared'].to_f
66
- @lifetime_stats[:avg_adrenaline_used] = lifetime_data['adrenalineused'].to_f
67
- @lifetime_stats[:avg_defibrillators_used] = lifetime_data['defibrillatorsused'].to_f
65
+ @lifetime_stats.merge!({
66
+ :avg_adrenaline_shared => lifetime_data['adrenalineshared'].to_f,
67
+ :avg_adrenaline_used => lifetime_data['adrenalineused'].to_f,
68
+ :avg_defibrillators_used => lifetime_data['defibrillatorsused'].to_f
69
+ })
68
70
  end
69
71
 
70
72
  @lifetime_stats
@@ -83,33 +85,36 @@ class L4D2Stats < GameStats
83
85
  if @scavenge_stats.nil?
84
86
  scavange_data = @xml_data['stats']['scavenge']
85
87
 
86
- @scavenge_stats = {}
87
- @scavenge_stats[:avg_cans_per_round] = scavange_data['avgcansperround'].to_f
88
- @scavenge_stats[:perfect_rounds] = scavange_data['perfect16canrounds'].to_i
89
- @scavenge_stats[:rounds_lost] = scavange_data['roundslost'].to_i
90
- @scavenge_stats[:rounds_played] = scavange_data['roundsplayed'].to_i
91
- @scavenge_stats[:rounds_won] = scavange_data['roundswon'].to_i
92
- @scavenge_stats[:total_cans] = scavange_data['totalcans'].to_i
88
+ @scavenge_stats = {
89
+ :avg_cans_per_round => scavange_data['avgcansperround'].to_f,
90
+ :perfect_rounds => scavange_data['perfect16canrounds'].to_i,
91
+ :rounds_lost => scavange_data['roundslost'].to_i,
92
+ :rounds_played => scavange_data['roundsplayed'].to_i,
93
+ :rounds_won => scavange_data['roundswon'].to_i,
94
+ :total_cans => scavange_data['totalcans'].to_i
95
+ }
93
96
 
94
97
  @scavenge_stats[:maps] = {}
95
98
  scavange_data['mapstats']['map'].each do |map_data|
96
- map_stats = {}
97
- map_stats['avg_round_score'] = map_data['avgscoreperround'].to_i
98
- map_stats['highest_game_score'] = map_data['highgamescore'].to_i
99
- map_stats['highest_round_score'] = map_data['highroundscore'].to_i
100
- map_stats['name'] = map_data['fullname']
101
- map_stats['rounds_played'] = map_data['roundsplayed'].to_i
102
- map_stats['rounds_won'] = map_data['roundswon'].to_i
99
+ map_stats = {
100
+ :avg_round_score => map_data['avgscoreperround'].to_i,
101
+ :highest_game_score => map_data['highgamescore'].to_i,
102
+ :highest_round_score => map_data['highroundscore'].to_i,
103
+ :name => map_data['fullname'],
104
+ :rounds_played => map_data['roundsplayed'].to_i,
105
+ :rounds_won => map_data['roundswon'].to_i
106
+ }
103
107
  @scavenge_stats[:maps][map_data['name']] = map_stats
104
108
 
105
109
  end
106
110
 
107
111
  @scavenge_stats[:infected] = {}
108
112
  scavange_data['infectedstats']['special'].each do |infected_data|
109
- infected_stats = {}
110
- infected_stats['max_damage_per_life'] = infected_data['maxdmg1life'].to_i
111
- infected_stats['max_pours_interrupted'] = infected_data['maxpoursinterrupted'].to_i
112
- infected_stats['special_attacks'] = infected_data['specialattacks'].to_i
113
+ infected_stats = {
114
+ :max_damage_per_life => infected_data['maxdmg1life'].to_i,
115
+ :max_pours_interrupted => infected_data['maxpoursinterrupted'].to_i,
116
+ :special_attacks => infected_data['specialattacks'].to_i
117
+ }
113
118
  @scavenge_stats[:infected][infected_data['name']] = infected_stats
114
119
  end
115
120
  end