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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +228 -0
- data/CONTRIBUTING.md +59 -0
- data/Gemfile.lock +12 -13
- data/README.md +9 -4
- data/lib/steam-condenser/version.rb +1 -1
- data/lib/steam/community/alien_swarm/alien_swarm_mission.rb +10 -9
- data/lib/steam/community/alien_swarm/alien_swarm_stats.rb +74 -72
- data/lib/steam/community/css/css_map.rb +2 -2
- data/lib/steam/community/css/css_stats.rb +54 -56
- data/lib/steam/community/css/css_weapon.rb +4 -4
- data/lib/steam/community/game_item.rb +2 -3
- data/lib/steam/community/game_leaderboard.rb +22 -15
- data/lib/steam/community/l4d/abstract_l4d_stats.rb +64 -61
- data/lib/steam/community/l4d/l4d2_stats.rb +26 -21
- data/lib/steam/community/steam_id.rb +8 -11
- data/lib/steam/community/web_api.rb +19 -14
- data/lib/steam/packets/s2a_info2_packet.rb +16 -14
- data/lib/steam/packets/s2a_info_detailed_packet.rb +24 -19
- data/lib/steam/packets/steam_packet_factory.rb +7 -2
- data/lib/steam/servers/game_server.rb +3 -2
- data/lib/steam/servers/master_server.rb +1 -1
- data/lib/steam/sockets/source_socket.rb +4 -9
- data/pkg/steam-condenser-1.3.5.gem +0 -0
- data/pkg/steam-condenser-1.3.5/Gemfile +7 -0
- data/pkg/steam-condenser-1.3.5/Gemfile.lock +45 -0
- data/pkg/steam-condenser-1.3.5/LICENSE +25 -0
- data/pkg/steam-condenser-1.3.5/README.md +70 -0
- data/pkg/steam-condenser-1.3.5/Rakefile +46 -0
- data/pkg/steam-condenser-1.3.5/lib/core_ext/stringio.rb +91 -0
- data/pkg/steam-condenser-1.3.5/lib/errors/packet_format_error.rb +13 -0
- data/pkg/steam-condenser-1.3.5/lib/errors/rcon_ban_error.rb +22 -0
- data/pkg/steam-condenser-1.3.5/lib/errors/rcon_no_auth_error.rb +21 -0
- data/pkg/steam-condenser-1.3.5/lib/errors/steam_condenser_error.rb +26 -0
- data/pkg/steam-condenser-1.3.5/lib/errors/timeout_error.rb +28 -0
- data/pkg/steam-condenser-1.3.5/lib/errors/web_api_error.rb +57 -0
- data/pkg/steam-condenser-1.3.5/lib/steam-condenser.rb +18 -0
- data/pkg/steam-condenser-1.3.5/lib/steam-condenser/community.rb +24 -0
- data/pkg/steam-condenser-1.3.5/lib/steam-condenser/servers.rb +24 -0
- data/pkg/steam-condenser-1.3.5/lib/steam-condenser/version.rb +11 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/alien_swarm/alien_swarm_mission.rb +119 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/alien_swarm/alien_swarm_stats.rb +186 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/alien_swarm/alien_swarm_weapon.rb +49 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/app_news.rb +133 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/cacheable.rb +199 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/css/css_map.rb +61 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/css/css_stats.rb +142 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/css/css_weapon.rb +69 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/defense_grid/defense_grid_stats.rb +238 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/dods/dods_class.rb +90 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/dods/dods_stats.rb +62 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/dods/dods_weapon.rb +67 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/dota2/dota2_beta_inventory.rb +30 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/dota2/dota2_inventory.rb +30 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/dota2/dota2_item.rb +33 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/game_achievement.rb +109 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/game_class.rb +22 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/game_inventory.rb +171 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/game_item.rb +156 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/game_item_schema.rb +131 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/game_leaderboard.rb +205 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/game_leaderboard_entry.rb +43 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/game_stats.rb +175 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/game_weapon.rb +41 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/abstract_l4d_stats.rb +185 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/abstract_l4d_weapon.rb +56 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d2_map.rb +90 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d2_stats.rb +174 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d2_weapon.rb +38 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d_explosive.rb +34 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d_map.rb +65 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d_stats.rb +73 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/l4d/l4d_weapon.rb +26 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/portal2/portal2_inventory.rb +30 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/portal2/portal2_item.rb +55 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/portal2/portal2_stats.rb +33 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/steam_game.rb +193 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/steam_group.rb +129 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/steam_id.rb +498 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_beta_inventory.rb +28 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_class.rb +92 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_class_factory.rb +40 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_engineer.rb +43 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_golden_wrench.rb +70 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_inventory.rb +30 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_item.rb +55 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_medic.rb +35 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_sniper.rb +28 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_spy.rb +41 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/tf2/tf2_stats.rb +77 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/web_api.rb +130 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/community/xml_data.rb +27 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2m_get_servers_batch2_packet.rb +59 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2s_info_packet.rb +24 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2s_player_packet.rb +31 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2s_rules_packet.rb +32 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/a2s_serverquery_getchallenge_packet.rb +25 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/c2m_checkmd5_packet.rb +31 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/m2a_server_batch_packet.rb +52 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/m2c_isvalidmd5_packet.rb +34 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/m2s_requestrestart_packet.rb +34 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_auth_request.rb +28 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_auth_response.rb +30 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_exec_request.rb +28 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_exec_response.rb +37 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_goldsrc_request.rb +35 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_goldsrc_response.rb +34 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_packet.rb +57 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_packet_factory.rb +43 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/rcon/rcon_terminator.rb +29 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/request_with_challenge.rb +19 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_info2_packet.rb +74 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_info_base_packet.rb +25 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_info_detailed_packet.rb +59 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_logstring_packet.rb +30 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_player_packet.rb +44 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2a_rules_packet.rb +48 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2c_challenge_packet.rb +35 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/s2m_heartbeat2_packet.rb +72 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/steam_packet.rb +52 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/packets/steam_packet_factory.rb +108 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/servers/game_server.rb +392 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/servers/goldsrc_server.rb +74 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/servers/master_server.rb +188 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/servers/server.rb +115 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/servers/source_server.rb +117 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/sockets/goldsrc_socket.rb +142 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/sockets/master_server_socket.rb +34 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/sockets/rcon_socket.rb +103 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/sockets/source_socket.rb +78 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/sockets/steam_socket.rb +91 -0
- data/pkg/steam-condenser-1.3.5/lib/steam/steam_player.rb +143 -0
- data/pkg/steam-condenser-1.3.5/steam-condenser.gemspec +26 -0
- data/pkg/steam-condenser-1.3.5/test/core_ext/test_stringio.rb +59 -0
- data/pkg/steam-condenser-1.3.5/test/fixtures/invalid.xml +2 -0
- data/pkg/steam-condenser-1.3.5/test/fixtures/sonofthor.xml +882 -0
- data/pkg/steam-condenser-1.3.5/test/fixtures/status_goldsrc +3 -0
- data/pkg/steam-condenser-1.3.5/test/fixtures/status_source +3 -0
- data/pkg/steam-condenser-1.3.5/test/fixtures/valve-members.xml +231 -0
- data/pkg/steam-condenser-1.3.5/test/helper.rb +48 -0
- data/pkg/steam-condenser-1.3.5/test/steam/community/test_cacheable.rb +100 -0
- data/pkg/steam-condenser-1.3.5/test/steam/community/test_steam_group.rb +83 -0
- data/pkg/steam-condenser-1.3.5/test/steam/community/test_steam_id.rb +144 -0
- data/pkg/steam-condenser-1.3.5/test/steam/community/test_web_api.rb +98 -0
- data/pkg/steam-condenser-1.3.5/test/steam/packets/test_steam_packet.rb +37 -0
- data/pkg/steam-condenser-1.3.5/test/steam/servers/test_game_server.rb +296 -0
- data/pkg/steam-condenser-1.3.5/test/steam/servers/test_goldsrc_server.rb +59 -0
- data/pkg/steam-condenser-1.3.5/test/steam/servers/test_master_server.rb +131 -0
- data/pkg/steam-condenser-1.3.5/test/steam/servers/test_server.rb +72 -0
- data/pkg/steam-condenser-1.3.5/test/steam/servers/test_source_server.rb +134 -0
- data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_goldsrc_socket.rb +127 -0
- data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_master_server_socket.rb +42 -0
- data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_rcon_socket.rb +118 -0
- data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_source_socket.rb +77 -0
- data/pkg/steam-condenser-1.3.5/test/steam/sockets/test_steam_socket.rb +97 -0
- data/steam-condenser.gemspec +2 -3
- data/test/steam/community/test_cacheable.rb +3 -0
- data/test/steam/community/test_web_api.rb +15 -2
- data/test/steam/packets/test_steam_packet.rb +1 -1
- data/test/steam/sockets/test_source_socket.rb +1 -1
- 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-
|
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
|
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 =
|
17
|
-
|
18
|
-
|
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 =
|
23
|
-
|
24
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
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-
|
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
|
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
|
44
|
-
@shots
|
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
|
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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
DISPLAY_TYPE_NONE = 0
|
20
|
+
DISPLAY_TYPE_NUMERIC = 1
|
21
|
+
DISPLAY_TYPE_SECONDS = 2
|
22
|
+
DISPLAY_TYPE_MILLISECONDS = 3
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
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
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
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
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
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
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
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
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
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
|
-
|
177
|
-
|
178
|
-
|
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
|
66
|
-
|
67
|
-
|
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
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
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
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
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
|
-
|
111
|
-
|
112
|
-
|
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
|