steam-condenser 0.13.1 → 0.14.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.
- data/lib/exceptions/packet_format_exception.rb +12 -5
- data/lib/exceptions/rcon_ban_exception.rb +11 -3
- data/lib/exceptions/rcon_no_auth_exception.rb +10 -3
- data/lib/exceptions/steam_condenser_exception.rb +8 -5
- data/lib/exceptions/timeout_exception.rb +13 -3
- data/lib/exceptions/web_api_exception.rb +31 -23
- data/lib/steam-condenser.rb +9 -3
- data/lib/steam-condenser/community.rb +8 -1
- data/lib/steam-condenser/servers.rb +7 -1
- data/lib/steam-condenser/version.rb +2 -1
- data/lib/steam/community/cacheable.rb +4 -4
- data/lib/steam/community/game_inventory.rb +119 -0
- data/lib/steam/community/game_item.rb +38 -0
- data/lib/steam/community/game_stats.rb +10 -4
- data/lib/steam/community/portal2/portal2_inventory.rb +21 -0
- data/lib/steam/community/portal2/portal2_item.rb +35 -0
- data/lib/steam/community/portal2/portal2_stats.rb +28 -0
- data/lib/steam/community/tf2/tf2_inventory.rb +7 -37
- data/lib/steam/community/tf2/tf2_item.rb +8 -79
- data/lib/steam/community/tf2/tf2_stats.rb +10 -13
- data/lib/steam/community/web_api.rb +1 -0
- data/lib/steam/packets/a2m_get_servers_batch2_packet.rb +37 -4
- data/lib/steam/packets/a2s_info_packet.rb +10 -5
- data/lib/steam/packets/a2s_player_packet.rb +16 -6
- data/lib/steam/packets/a2s_rules_packet.rb +16 -4
- data/lib/steam/packets/a2s_serverquery_getchallenge_packet.rb +11 -5
- data/lib/steam/packets/c2m_checkmd5_packet.rb +10 -4
- data/lib/steam/packets/m2a_server_batch_packet.rb +19 -3
- data/lib/steam/packets/m2c_isvalidmd5_packet.rb +14 -5
- data/lib/steam/packets/m2s_requestrestart_packet.rb +14 -4
- data/lib/steam/packets/rcon/rcon_auth_request.rb +15 -3
- data/lib/steam/packets/rcon/rcon_auth_response.rb +17 -3
- data/lib/steam/packets/rcon/rcon_exec_request.rb +15 -3
- data/lib/steam/packets/rcon/rcon_exec_response.rb +20 -3
- data/lib/steam/packets/rcon/rcon_goldsrc_request.rb +18 -3
- data/lib/steam/packets/rcon/rcon_goldsrc_response.rb +17 -3
- data/lib/steam/packets/rcon/rcon_packet.rb +31 -3
- data/lib/steam/packets/rcon/rcon_packet_factory.rb +15 -5
- data/lib/steam/packets/rcon/rcon_terminator.rb +14 -5
- data/lib/steam/packets/request_with_challenge.rb +10 -5
- data/lib/steam/packets/s2a_info2_packet.rb +14 -5
- data/lib/steam/packets/s2a_info_base_packet.rb +16 -6
- data/lib/steam/packets/s2a_info_detailed_packet.rb +15 -8
- data/lib/steam/packets/s2a_logstring_packet.rb +11 -5
- data/lib/steam/packets/s2a_player_packet.rb +14 -6
- data/lib/steam/packets/s2a_rules_packet.rb +15 -5
- data/lib/steam/packets/s2c_challenge_packet.rb +17 -6
- data/lib/steam/packets/s2m_heartbeat2_packet.rb +18 -4
- data/lib/steam/packets/steam_packet.rb +14 -5
- data/lib/steam/packets/steam_packet_factory.rb +25 -2
- data/lib/steam/servers/game_server.rb +154 -25
- data/lib/steam/servers/goldsrc_server.rb +35 -3
- data/lib/steam/servers/master_server.rb +77 -23
- data/lib/steam/servers/server.rb +42 -3
- data/lib/steam/servers/source_server.rb +35 -11
- data/lib/stringio_additions.rb +48 -3
- data/test/query_tests.rb +4 -4
- metadata +11 -6
@@ -0,0 +1,21 @@
|
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
|
+
#
|
4
|
+
# Copyright (c) 2011, Sebastian Staudt
|
5
|
+
|
6
|
+
require 'steam/community/game_inventory'
|
7
|
+
require 'steam/community/portal2/portal2_item'
|
8
|
+
|
9
|
+
# Represents the inventory (a.k.a. Robot Enrichment) of a Portal 2 player
|
10
|
+
class Portal2Inventory
|
11
|
+
|
12
|
+
include Cacheable
|
13
|
+
cacheable_with_ids :steam_id64
|
14
|
+
|
15
|
+
include GameInventory
|
16
|
+
|
17
|
+
@@app_id = 620
|
18
|
+
|
19
|
+
@@item_class = Portal2Item
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
|
+
#
|
4
|
+
# Copyright (c) 2011, Sebastian Staudt
|
5
|
+
|
6
|
+
require 'steam/community/game_item'
|
7
|
+
|
8
|
+
# Represents a Portal 2 item
|
9
|
+
class Portal2Item
|
10
|
+
|
11
|
+
include GameItem
|
12
|
+
|
13
|
+
BOTS = [ :pbody, :atlas ]
|
14
|
+
|
15
|
+
# Creates a new instance of a Portal2Item with the given data
|
16
|
+
def initialize(inventory, item_data)
|
17
|
+
super
|
18
|
+
|
19
|
+
@equipped = {}
|
20
|
+
BOTS.each_index do |class_id|
|
21
|
+
@equipped[BOTS[class_id]] = (item_data[:inventory] & (1 << 16 + class_id) != 0)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns the symbols for each bot this player has equipped this item
|
26
|
+
def bots_equipped?
|
27
|
+
@equipped.reject { |bot_id, equipped| !equipped }
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns whether this item is equipped by this player at all
|
31
|
+
def equipped?
|
32
|
+
@equipped.has_value? true
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
|
+
#
|
4
|
+
# Copyright (c) 2011, Sebastian Staudt
|
5
|
+
|
6
|
+
require 'steam/community/game_stats'
|
7
|
+
require 'steam/community/portal2/portal2_inventory'
|
8
|
+
|
9
|
+
# The Portal2Stats class represents the game statistics for a single user in
|
10
|
+
# Portal 2
|
11
|
+
class Portal2Stats < GameStats
|
12
|
+
|
13
|
+
attr_reader :accumulated_points
|
14
|
+
|
15
|
+
# Creates a Portal2Stats object by calling the super constructor with the
|
16
|
+
# game name "portal2"
|
17
|
+
def initialize(steam_id)
|
18
|
+
super steam_id, 'portal2'
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns the current Portal 2 inventory (a.k.a Robot Enrichment) of this
|
22
|
+
# player
|
23
|
+
def inventory
|
24
|
+
@inventory = Portal2Inventory.new(steam_id64) if @inventory.nil?
|
25
|
+
@inventory
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -1,11 +1,10 @@
|
|
1
|
-
# This code is free software; you can redistribute it and/or modify it under
|
2
|
-
# terms of the new BSD License.
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
3
|
#
|
4
|
-
# Copyright (c) 2010, Sebastian Staudt
|
4
|
+
# Copyright (c) 2010-2011, Sebastian Staudt
|
5
5
|
|
6
|
-
require 'steam/community/
|
6
|
+
require 'steam/community/game_inventory'
|
7
7
|
require 'steam/community/tf2/tf2_item'
|
8
|
-
require 'steam/community/web_api'
|
9
8
|
|
10
9
|
# Represents the inventory (aka. Backpack) of a Team Fortress 2 player
|
11
10
|
class TF2Inventory
|
@@ -13,39 +12,10 @@ class TF2Inventory
|
|
13
12
|
include Cacheable
|
14
13
|
cacheable_with_ids :steam_id64
|
15
14
|
|
16
|
-
|
15
|
+
include GameInventory
|
17
16
|
|
18
|
-
|
19
|
-
# to fetch the data and create the TF2Item instances contained in this
|
20
|
-
# players backpack
|
21
|
-
def initialize(steam_id64, fetch_now = true)
|
22
|
-
@steam_id64 = steam_id64
|
17
|
+
@@app_id = 440
|
23
18
|
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
# Returns the item at the given position in the backpack. The positions range
|
28
|
-
# from 1 to 100 instead of the usual array indices (0 to 99).
|
29
|
-
def [](index)
|
30
|
-
@items[index - 1]
|
31
|
-
end
|
32
|
-
|
33
|
-
# Updates the contents of the backpack using Steam Web API
|
34
|
-
def fetch
|
35
|
-
result = WebApi.json!('ITFItems_440', 'GetPlayerItems', 1, { :SteamID => @steam_id64 })
|
36
|
-
|
37
|
-
@items = []
|
38
|
-
result[:items][:item].each do |item_data|
|
39
|
-
unless item_data.nil?
|
40
|
-
item = TF2Item.new(item_data)
|
41
|
-
@items[item.backpack_position - 1] = item
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Returns the number of items in the user's backpack
|
47
|
-
def size
|
48
|
-
@items.size
|
49
|
-
end
|
19
|
+
@@item_class = TF2Item
|
50
20
|
|
51
21
|
end
|
@@ -1,71 +1,25 @@
|
|
1
|
-
# This code is free software; you can redistribute it and/or modify it under
|
2
|
-
# terms of the new BSD License.
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
3
|
#
|
4
|
-
# Copyright (c) 2010, Sebastian Staudt
|
4
|
+
# Copyright (c) 2010-2011, Sebastian Staudt
|
5
5
|
|
6
|
-
require 'steam/community/
|
6
|
+
require 'steam/community/game_item'
|
7
7
|
|
8
8
|
# Represents a Team Fortress 2 item
|
9
9
|
class TF2Item
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
attr_reader :attributes, :backpack_position, :class, :count, :defindex, :id,
|
14
|
-
:level, :name, :quality, :slot, :type
|
15
|
-
|
16
|
-
@@attribute_schema = nil
|
17
|
-
|
18
|
-
@@item_schema = nil
|
11
|
+
include GameItem
|
19
12
|
|
20
|
-
|
21
|
-
|
22
|
-
# Returns the attribute schema
|
23
|
-
#
|
24
|
-
# The attribute schema is fetched first if not done already
|
25
|
-
def self.attribute_schema
|
26
|
-
update_schema if @@attribute_schema.nil?
|
27
|
-
|
28
|
-
@@attribute_schema
|
29
|
-
end
|
30
|
-
|
31
|
-
# Returns the item schema
|
32
|
-
#
|
33
|
-
# The item schema is fetched first if not done already
|
34
|
-
def self.item_schema
|
35
|
-
update_schema if @@item_schema.nil?
|
36
|
-
|
37
|
-
@@item_schema
|
38
|
-
end
|
39
|
-
|
40
|
-
# Sets the language the schema should be fetched in (default is: +'en'+)
|
41
|
-
def self.schema_language=(language)
|
42
|
-
@@schema_language = language
|
43
|
-
end
|
13
|
+
CLASSES = [ :scout, :sniper, :soldier, :demoman, :medic, :heavy, :pyro, :spy ]
|
44
14
|
|
45
15
|
# Creates a new instance of a TF2Item with the given data
|
46
|
-
def initialize(item_data)
|
47
|
-
|
48
|
-
|
49
|
-
@defindex = item_data[:defindex]
|
50
|
-
|
51
|
-
@backpack_position = item_data[:inventory] & 0xffff
|
52
|
-
@class = @@item_schema[@defindex][:item_class]
|
53
|
-
@count = item_data[:quantity]
|
54
|
-
@id = item_data[:id]
|
55
|
-
@level = item_data[:level]
|
56
|
-
@name = @@item_schema[@defindex][:item_name]
|
57
|
-
@quality = @@qualities[item_data[:quality]]
|
58
|
-
@slot = @@item_schema[@defindex][:item_slot]
|
59
|
-
@type = @@item_schema[@defindex][:item_type_name]
|
16
|
+
def initialize(inventory, item_data)
|
17
|
+
super
|
60
18
|
|
61
19
|
@equipped = {}
|
62
20
|
CLASSES.each_index do |class_id|
|
63
21
|
@equipped[CLASSES[class_id]] = (item_data[:inventory] & (1 << 16 + class_id) != 0)
|
64
22
|
end
|
65
|
-
|
66
|
-
unless @@item_schema[@defindex][:attributes].nil?
|
67
|
-
@attributes = @@item_schema[@defindex][:attributes][:attribute]
|
68
|
-
end
|
69
23
|
end
|
70
24
|
|
71
25
|
# Returns the class symbols for each class this player has equipped this item
|
@@ -78,29 +32,4 @@ class TF2Item
|
|
78
32
|
@equipped.has_value? true
|
79
33
|
end
|
80
34
|
|
81
|
-
protected
|
82
|
-
|
83
|
-
# Updates the item schema (this includes attributes and qualities) using the
|
84
|
-
# +GetSchema+ method of interface +ITFItems_440+
|
85
|
-
def update_schema
|
86
|
-
params = {}
|
87
|
-
params[:language] = @@schema_language unless @@schema_language.nil?
|
88
|
-
result = WebApi.json!('ITFItems_440', 'GetSchema', 1, params)
|
89
|
-
|
90
|
-
@@attribute_schema = {}
|
91
|
-
result[:attributes][:attribute].each do |attribute_data|
|
92
|
-
@@attribute_schema[attribute_data[:name]] = attribute_data
|
93
|
-
end
|
94
|
-
|
95
|
-
@@item_schema = []
|
96
|
-
result[:items][:item].each do |item_data|
|
97
|
-
@@item_schema[item_data[:defindex]] = item_data
|
98
|
-
end
|
99
|
-
|
100
|
-
@@qualities = []
|
101
|
-
result[:qualities].each do |quality, id|
|
102
|
-
@@qualities[id] = quality
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
35
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
# This code is free software; you can redistribute it and/or modify it under
|
2
|
-
# terms of the new BSD License.
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
3
|
#
|
4
|
-
# Copyright (c) 2008-
|
4
|
+
# Copyright (c) 2008-2011, Sebastian Staudt
|
5
5
|
|
6
6
|
require 'steam/community/game_stats'
|
7
7
|
require 'steam/community/tf2/tf2_class_factory'
|
@@ -23,16 +23,6 @@ class TF2Stats < GameStats
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
# Returns the current Team Fortress 2 inventory (a.k.a. backpack) of this
|
27
|
-
# player
|
28
|
-
def inventory
|
29
|
-
if @inventory.nil?
|
30
|
-
@inventory = TF2Inventory.new(steam_id64)
|
31
|
-
end
|
32
|
-
|
33
|
-
@inventory
|
34
|
-
end
|
35
|
-
|
36
26
|
# Returns a Hash of TF2Class for this user containing all Team Fortress 2
|
37
27
|
# classes. If the classes haven't been parsed already, parsing is done now.
|
38
28
|
def class_stats
|
@@ -48,4 +38,11 @@ class TF2Stats < GameStats
|
|
48
38
|
@class_stats
|
49
39
|
end
|
50
40
|
|
41
|
+
# Returns the current Team Fortress 2 inventory (a.k.a. backpack) of this
|
42
|
+
# player
|
43
|
+
def inventory
|
44
|
+
@inventory = TF2Inventory.new(steam_id64) if @inventory.nil?
|
45
|
+
@inventory
|
46
|
+
end
|
47
|
+
|
51
48
|
end
|
@@ -88,6 +88,7 @@ module WebApi
|
|
88
88
|
open(url, { :proxy => true }).read
|
89
89
|
rescue OpenURI::HTTPError
|
90
90
|
status = $!.io.status[0]
|
91
|
+
status = [status, ''] unless status.is_a? Array
|
91
92
|
raise WebApiException.new(:unauthorized) if status[0].to_i == 401
|
92
93
|
raise WebApiException.new(:http_error, status[0].to_i, status[1])
|
93
94
|
end
|
@@ -1,16 +1,46 @@
|
|
1
|
-
# This code is free software; you can redistribute it and/or modify it under
|
2
|
-
# terms of the new BSD License.
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
3
|
#
|
4
|
-
# Copyright (c) 2008-
|
4
|
+
# Copyright (c) 2008-2011, Sebastian Staudt
|
5
5
|
|
6
6
|
require 'steam/packets/steam_packet'
|
7
7
|
require 'steam/servers/master_server'
|
8
8
|
|
9
|
+
# This packet class represents a A2M_GET_SERVERS_BATCH2 request sent to a
|
10
|
+
# master server
|
11
|
+
#
|
12
|
+
# It is used to receive a list of game servers matching the specified filters.
|
13
|
+
#
|
14
|
+
# Filtering:
|
15
|
+
# Instead of filtering the results sent by the master server locally, you
|
16
|
+
# should at least use the following filters to narrow down the results sent by
|
17
|
+
# the master server. Receiving all servers from the master server is taking
|
18
|
+
# quite some time.
|
19
|
+
#
|
20
|
+
# Available filters:
|
21
|
+
#
|
22
|
+
# * `\type\d`: Request only dedicated servers
|
23
|
+
# * `\secure\1`: Request only secure servers
|
24
|
+
# * `\gamedir\[mod]`: Request only servers of a specific mod
|
25
|
+
# * `\map\[mapname]`: Request only servers running a specific map
|
26
|
+
# * `\linux\1`: Request only linux servers
|
27
|
+
# * `\emtpy\1`: Request only **non**-empty servers
|
28
|
+
# * `\full\`: Request only servers **not** full
|
29
|
+
# * `\proxy\1`: Request only spectator proxy servers
|
30
|
+
#
|
31
|
+
# @author Sebastian Staudt
|
32
|
+
# @see MasterServer#servers
|
9
33
|
class A2M_GET_SERVERS_BATCH2_Packet
|
10
34
|
|
11
35
|
include SteamPacket
|
12
36
|
|
13
|
-
# Creates a master server request, filtering by the given paramters
|
37
|
+
# Creates a master server request, filtering by the given paramters
|
38
|
+
#
|
39
|
+
# @param [Numeric] region_code The region code to filter servers by region
|
40
|
+
# @param [String] start_ip This should be the last IP received from the
|
41
|
+
# master server or 0.0.0.0
|
42
|
+
# @param [String] filter The filters to apply in the form
|
43
|
+
# "\filtername\value..."
|
14
44
|
def initialize(region_code = MasterServer::REGION_ALL, start_ip = '0.0.0.0:0', filter = '')
|
15
45
|
super A2M_GET_SERVERS_BATCH2_HEADER
|
16
46
|
|
@@ -19,6 +49,9 @@ class A2M_GET_SERVERS_BATCH2_Packet
|
|
19
49
|
@start_ip = start_ip
|
20
50
|
end
|
21
51
|
|
52
|
+
# Returns the raw data representing this packet
|
53
|
+
#
|
54
|
+
# @return [String] A string containing the raw data of this request packet
|
22
55
|
def to_s
|
23
56
|
[@header_data, @region_code, @start_ip, @filter].pack('c2Z*Z*')
|
24
57
|
end
|
@@ -1,12 +1,17 @@
|
|
1
|
-
# This code is free software; you can redistribute it and/or modify it under
|
2
|
-
# terms of the new BSD License.
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
3
|
#
|
4
|
-
# Copyright (c) 2008-
|
4
|
+
# Copyright (c) 2008-2011, Sebastian Staudt
|
5
5
|
|
6
6
|
require 'steam/packets/steam_packet'
|
7
7
|
|
8
|
-
#
|
9
|
-
#
|
8
|
+
# This packet class class represents a A2S_INFO request send to a game server
|
9
|
+
#
|
10
|
+
# It will cause the server to send some basic information about itself, e.g.
|
11
|
+
# the running game, map and the number of players.
|
12
|
+
#
|
13
|
+
# @author Sebastian Staudt
|
14
|
+
# @see GameServer#update_server_info
|
10
15
|
class A2S_INFO_Packet
|
11
16
|
|
12
17
|
include SteamPacket
|
@@ -1,19 +1,29 @@
|
|
1
|
-
# This code is free software; you can redistribute it and/or modify it under
|
2
|
-
# terms of the new BSD License.
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
3
|
#
|
4
|
-
# Copyright (c) 2008-
|
4
|
+
# Copyright (c) 2008-2011, Sebastian Staudt
|
5
5
|
|
6
6
|
require 'steam/packets/request_with_challenge'
|
7
7
|
require 'steam/packets/steam_packet'
|
8
8
|
|
9
|
-
#
|
10
|
-
#
|
9
|
+
# This packet class represents a A2S_PLAYER request send to a game server
|
10
|
+
#
|
11
|
+
# It is used to request the list of players currently playing on the server.
|
12
|
+
#
|
13
|
+
# This packet type requires the client to challenge the server in advance,
|
14
|
+
# which is done automatically if required.
|
15
|
+
#
|
16
|
+
# @author Sebastian Staudt
|
17
|
+
# @see GameServer#update_player_info
|
11
18
|
class A2S_PLAYER_Packet
|
12
19
|
|
13
20
|
include SteamPacket
|
14
21
|
include RequestWithChallenge
|
15
22
|
|
16
|
-
# Creates a new A2S_PLAYER request object including the
|
23
|
+
# Creates a new A2S_PLAYER request object including the challenge number
|
24
|
+
#
|
25
|
+
# @param [Numeric] challenge_number The challenge number received from the
|
26
|
+
# server
|
17
27
|
def initialize(challenge_number = -1)
|
18
28
|
super A2S_PLAYER_HEADER, challenge_number
|
19
29
|
end
|
@@ -1,18 +1,30 @@
|
|
1
|
-
# This code is free software; you can redistribute it and/or modify it under
|
2
|
-
# terms of the new BSD License.
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
3
|
#
|
4
4
|
# Copyright (c) 2008-2011, Sebastian Staudt
|
5
5
|
|
6
6
|
require 'steam/packets/request_with_challenge'
|
7
7
|
require 'steam/packets/steam_packet'
|
8
8
|
|
9
|
-
#
|
9
|
+
# This packet class represents a A2S_RULES request send to a game server
|
10
|
+
#
|
11
|
+
# The game server will return a list of currently active game rules, e.g.
|
12
|
+
# `mp_friendlyfire = 1`.
|
13
|
+
#
|
14
|
+
# This packet type requires the client to challenge the server in advance,
|
15
|
+
# which is done automatically if required.
|
16
|
+
#
|
17
|
+
# @author Sebastian Staudt
|
18
|
+
# @see GameServer#update_rules_info
|
10
19
|
class A2S_RULES_Packet
|
11
20
|
|
12
21
|
include SteamPacket
|
13
22
|
include RequestWithChallenge
|
14
23
|
|
15
|
-
# Creates a new A2S_RULES request object including the
|
24
|
+
# Creates a new A2S_RULES request object including the challenge number
|
25
|
+
#
|
26
|
+
# @param [Numeric] challenge_number The challenge number received from the
|
27
|
+
# server
|
16
28
|
def initialize(challenge_number = -1)
|
17
29
|
super A2S_RULES_HEADER, challenge_number
|
18
30
|
end
|