kag-gather 1.5.7 → 1.5.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MGVhMjVmNTgzZGI3ZTM5NmYyNzI5MTUwZmRjNmMxOTVkZTllMTU5Yg==
5
+ data.tar.gz: !binary |-
6
+ YjU4MGJhMmMzMDAyOGY5YzQzZWE2ZDY0ZTE0NGUyMzg4YWE4YjdiYw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MTBlZDE3YWQ4NTFkYmEzMWNjMDhkNzQyN2IxNjA2NWRjZGM5NzBhNjZmYzE3
10
+ OTUyMzU4ZTFmZTdlMWZmYzM4NzRlYjVkNDA3MDk5OTEzN2U5YzEwNzBiZmU4
11
+ MmRjYzIzMjExMWY4YmE1YzNlOTIwYTllMGM0YTc2YmJhOGFjYzI=
12
+ data.tar.gz: !binary |-
13
+ NjkyZDAxZjA0MzcxMjg3MTcwZmIxNDY3MzJkZGU0NWJiODRmNDkyNzUxZjIx
14
+ MzMyZTgwODdhOGY2OWMyYWMxMTI0YzQ1MDAwYmM3ODU0NjkzZTE5MWI2MzYy
15
+ NjY1NWVkMDdiNjA3ZGJkYTc3OTFkNWUzODBmN2JkYTlkMjdlZWQ=
@@ -48,7 +48,15 @@ module KAG
48
48
  team_list.each do |ts|
49
49
  eb = lb+players_per_team-1
50
50
  eb = self.players.length if eb > self.players.length-1
51
- ps = Hash[self.players.sort_by{|k,v| v ? v.to_s : ''}[lb..(eb)]]
51
+ x = 0
52
+ ps = {}
53
+ self.players.each do |authname,user|
54
+ if x >= lb and x <= eb
55
+ ps[authname.to_sym] = user
56
+ end
57
+ x = x + 1
58
+ end
59
+ #ps = Hash[self.players.sort_by{|k,v| v ? v.to_s : ''}[lb..(eb)]]
52
60
  lb = players_per_team
53
61
 
54
62
  self.teams << KAG::Gather::Team.new({
@@ -174,10 +182,12 @@ module KAG
174
182
  match = self.dup
175
183
  match[:server] = self.server[:key]
176
184
  ts = []
177
- match.teams.each do |team|
178
- ts << {:players => team.teammates,:color => team[:color],:name => team[:name]}
185
+ if match.teams
186
+ match.teams.each do |team|
187
+ ts << {:players => team.teammates,:color => team[:color],:name => team[:name]}
188
+ end
189
+ match[:teams] = ts
179
190
  end
180
- match[:teams] = ts
181
191
  match.delete(:players)
182
192
  match.delete(:bot) if match.key?(:bot)
183
193
 
@@ -3,7 +3,7 @@ require 'kag/common'
3
3
  require 'commands/help'
4
4
  require 'kag/bot/bot'
5
5
  require 'kag/bans/report'
6
- require 'kag/server'
6
+ require 'kag/server/instance'
7
7
  require 'kag/gather/queue'
8
8
  require 'kag/gather/match'
9
9
 
@@ -24,11 +24,7 @@ module KAG
24
24
  end
25
25
 
26
26
  def _load_servers
27
- @servers = {}
28
- KAG::Config.instance[:servers].each do |k,s|
29
- s[:key] = k
30
- @servers[k] = KAG::Server.new(s)
31
- end
27
+ @servers = KAG::Server::Instance.fetch_all
32
28
  end
33
29
 
34
30
  #listen_to :channel, method: :channel_listen
@@ -364,6 +360,7 @@ module KAG
364
360
  def kick_from_match(m,nick)
365
361
  if is_admin(m.user)
366
362
  user = User(nick.to_s)
363
+ user.refresh
367
364
  if user
368
365
  match = get_match_in(user)
369
366
  if match
@@ -48,12 +48,18 @@ module KAG
48
48
  def check_for_afk(gather)
49
49
  max_idle = (KAG::Config.instance[:idle][:max] or 1800)
50
50
  max_idle = max_idle.to_i
51
- self.players.each do |authname,user|
52
- user.refresh
53
- if user.idle > max_idle
54
- self.remove(user)
55
- gather.send_channels_msg "Removed #{user.authname} from queue (#{KAG::Gather::Match.type_as_string}) for being idle too long [#{self.length}]"
51
+ begin
52
+ self.players.each do |authname,user|
53
+ user.refresh
54
+ if user.idle > max_idle
55
+ self.remove(user)
56
+ gather.send_channels_msg "Removed #{user.authname} from queue (#{KAG::Gather::Match.type_as_string}) for being idle too long [#{self.length}]"
57
+ end
56
58
  end
59
+ rescue Exception => e
60
+ puts e.message
61
+ puts e.backtrace.join("\n")
62
+ false
57
63
  end
58
64
  end
59
65
  end
@@ -45,7 +45,11 @@ module KAG
45
45
  end
46
46
 
47
47
  def has_player?(user)
48
- self.players.keys.include?(user.authname.to_sym)
48
+ if user.authname
49
+ self.players.keys.include?(user.authname.to_sym)
50
+ else
51
+ false
52
+ end
49
53
  end
50
54
 
51
55
  def remove_player(user)
@@ -0,0 +1,198 @@
1
+ require 'cinch'
2
+ require 'symboltable'
3
+ require 'json'
4
+ require 'kagerator'
5
+ require 'kag/config'
6
+ require 'socket'
7
+
8
+ module KAG
9
+ module Server
10
+ class Instance < SymbolTable
11
+ def self.fetch_all
12
+ servers = {}
13
+ KAG::Config.instance[:servers].each do |k,s|
14
+ s[:key] = k
15
+ servers[k] = KAG::Server::Instance.new(s)
16
+ end
17
+ servers
18
+ end
19
+
20
+ def info
21
+ Kagerator.server(self[:ip],self[:port])
22
+ end
23
+
24
+ def in_use?
25
+ self.key?(:match)
26
+ end
27
+
28
+ def has_rcon?
29
+ self[:rcon_password] and !self[:rcon_password].empty?
30
+ end
31
+
32
+ def socket
33
+ unless self[:_socket]
34
+ begin
35
+ self[:_socket] = TCPSocket.new(self[:ip],self[:port])
36
+ rescue Exception => e
37
+ puts e.message
38
+ puts e.backtrace.join("\n")
39
+ end
40
+ end
41
+ puts self[:_]
42
+ self[:_socket]
43
+ end
44
+
45
+ def text_join
46
+ "Join \x0305#{self[:key]} - #{self[:ip]}:#{self[:port]} \x0306password #{self[:password]}\x0301 | Visit kag://#{self[:ip]}/#{self[:password]}"
47
+ end
48
+
49
+ def connect
50
+ return true if self.connected?
51
+ puts "[RCON] Attempting to get socket"
52
+ unless self.socket
53
+ puts "[RCON] Could not establish TCP socket to connect"
54
+ return false
55
+ end
56
+ success = false
57
+ begin
58
+ self.socket.puts self[:rcon_password]
59
+ z = self.socket.gets
60
+ puts "[RCON] "+z.to_s
61
+ z.include?("now authenticated")
62
+ self[:_connected] = true
63
+ success = true
64
+ rescue Exception => e
65
+ puts e.message
66
+ puts e.backtrace.join("\n")
67
+ end
68
+ success
69
+ end
70
+
71
+ def disconnect
72
+ if self[:_socket]
73
+ puts "[RCON] Closing socket..."
74
+ #self.socket.puts "/quit"
75
+ self[:_socket].close
76
+ self[:_connected] = false
77
+ self.delete(:_socket)
78
+ end
79
+ true
80
+ end
81
+
82
+ def connected?
83
+ self[:_connected]
84
+ end
85
+
86
+ def _is_newline?(line)
87
+ line.empty?
88
+ end
89
+
90
+ def _parse_line(line)
91
+ line.gsub!(/\r/,"")
92
+ line.gsub!(/\n/,"")
93
+ line = line.strip
94
+ ep = line.index(']')
95
+ if ep
96
+ line = line[(ep+1)..line.length].strip
97
+ else
98
+ line = line[10..line.length].strip
99
+ end
100
+ line.gsub!(/\r/,"")
101
+ line.gsub!(/\n/,"")
102
+ line
103
+ end
104
+
105
+ def _cycle
106
+ while (line = self.socket.gets)
107
+ line = _parse_line(line)
108
+ puts "[RCON] "+line
109
+ break if (_is_newline?(line) or line.empty?)
110
+ end
111
+ end
112
+
113
+ ##
114
+ # broken
115
+ #
116
+ def players
117
+ return false unless self.connect
118
+ _command "/rcon /players"
119
+
120
+ players = []
121
+ while (line = self.socket.gets)
122
+ puts "[RCONPRIOR] '"+line+"'"
123
+ line = _parse_line(line)
124
+ puts "[RCON] '"+line+"'"
125
+ break if (line.empty? or line == '' or line == "\n")
126
+
127
+ player = SymbolTable.new
128
+
129
+ # get nick
130
+ sp = line.index("[")
131
+ next if sp == nil
132
+ ep = line.index("]",sp)
133
+ player[:nick] = line[(sp+1)..(ep-1)]
134
+ line = line[ep..line.length].strip
135
+
136
+ # get id
137
+ sp = line.index("(")
138
+ ep = line.index(")",sp)
139
+ player[:id] = line[(sp+4)..(ep-1)]
140
+ line = line[ep..line.length]
141
+
142
+ # get ip
143
+ sp = line.index("(")
144
+ ep = line.index(")",sp)
145
+ player[:ip] = line[(sp+4)..(ep-1)]
146
+ line = line[ep..line.length]
147
+
148
+ # get hwid
149
+ sp = line.index("(")
150
+ ep = line.index(")",sp)
151
+ player[:hwid] = line[(sp+6)..(ep-1)]
152
+
153
+ players << player
154
+ end
155
+ players
156
+ end
157
+
158
+ def kick(nick)
159
+ return false unless self.connect
160
+ self.socket.puts "/kick #{nick}"
161
+ _cycle
162
+ end
163
+
164
+ def kick_all
165
+ return false unless self.connect
166
+ ps = self.players
167
+ if ps
168
+ ps.each do |player|
169
+ _command "/kick #{player[:nick]}"
170
+ end
171
+ else
172
+ puts "No Players found on Server #{self[:ip]}!"
173
+ end
174
+ _cycle
175
+ end
176
+
177
+ def restart_map
178
+ return false unless self.connect
179
+ _command "/restartmap"
180
+ _cycle
181
+ end
182
+
183
+ def next_map
184
+ return false unless self.connect
185
+ _command "/nextmap"
186
+ _cycle
187
+ end
188
+
189
+ protected
190
+
191
+ def _command(cmd)
192
+ return false unless self.connected?
193
+ puts "[RCON] #{cmd.to_s}"
194
+ self.socket.puts cmd
195
+ end
196
+ end
197
+ end
198
+ end
data/lib/kag/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module KAG
2
- VERSION = '1.5.7'
2
+ VERSION = '1.5.8'
3
3
  def self.version
4
4
  VERSION
5
5
  end
metadata CHANGED
@@ -1,144 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kag-gather
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.5.7
4
+ version: 1.5.8
6
5
  platform: ruby
7
6
  authors:
8
7
  - Shaun McCormick
9
- autorequire:
8
+ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
11
  date: 2013-03-26 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: cinch
16
- version_requirements: !ruby/object:Gem::Requirement
15
+ requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
17
  - - '='
19
18
  - !ruby/object:Gem::Version
20
19
  version: 2.0.4
21
- none: false
22
- requirement: !ruby/object:Gem::Requirement
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.0.4
27
- none: false
28
- prerelease: false
29
- type: :runtime
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: cinch-identify
32
- version_requirements: !ruby/object:Gem::Requirement
29
+ requirement: !ruby/object:Gem::Requirement
33
30
  requirements:
34
31
  - - '='
35
32
  - !ruby/object:Gem::Version
36
33
  version: 1.4.1
37
- none: false
38
- requirement: !ruby/object:Gem::Requirement
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
39
37
  requirements:
40
38
  - - '='
41
39
  - !ruby/object:Gem::Version
42
40
  version: 1.4.1
43
- none: false
44
- prerelease: false
45
- type: :runtime
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: json
48
- version_requirements: !ruby/object:Gem::Requirement
43
+ requirement: !ruby/object:Gem::Requirement
49
44
  requirements:
50
45
  - - ! '>='
51
46
  - !ruby/object:Gem::Version
52
47
  version: '0'
53
- none: false
54
- requirement: !ruby/object:Gem::Requirement
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
55
51
  requirements:
56
52
  - - ! '>='
57
53
  - !ruby/object:Gem::Version
58
54
  version: '0'
59
- none: false
60
- prerelease: false
61
- type: :runtime
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: symboltable
64
- version_requirements: !ruby/object:Gem::Requirement
57
+ requirement: !ruby/object:Gem::Requirement
65
58
  requirements:
66
59
  - - '='
67
60
  - !ruby/object:Gem::Version
68
61
  version: 1.0.2
69
- none: false
70
- requirement: !ruby/object:Gem::Requirement
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
66
  - - '='
73
67
  - !ruby/object:Gem::Version
74
68
  version: 1.0.2
75
- none: false
76
- prerelease: false
77
- type: :runtime
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: kagerator
80
- version_requirements: !ruby/object:Gem::Requirement
71
+ requirement: !ruby/object:Gem::Requirement
81
72
  requirements:
82
73
  - - '='
83
74
  - !ruby/object:Gem::Version
84
75
  version: 1.0.3
85
- none: false
86
- requirement: !ruby/object:Gem::Requirement
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
87
79
  requirements:
88
80
  - - '='
89
81
  - !ruby/object:Gem::Version
90
82
  version: 1.0.3
91
- none: false
92
- prerelease: false
93
- type: :runtime
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rake
96
- version_requirements: !ruby/object:Gem::Requirement
97
- requirements:
98
- - - ! '>='
99
- - !ruby/object:Gem::Version
100
- version: '0'
101
- none: false
102
85
  requirement: !ruby/object:Gem::Requirement
103
86
  requirements:
104
87
  - - ! '>='
105
88
  - !ruby/object:Gem::Version
106
89
  version: '0'
107
- none: false
108
- prerelease: false
109
90
  type: :development
110
- - !ruby/object:Gem::Dependency
111
- name: rspec
91
+ prerelease: false
112
92
  version_requirements: !ruby/object:Gem::Requirement
113
93
  requirements:
114
94
  - - ! '>='
115
95
  - !ruby/object:Gem::Version
116
96
  version: '0'
117
- none: false
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
118
99
  requirement: !ruby/object:Gem::Requirement
119
100
  requirements:
120
101
  - - ! '>='
121
102
  - !ruby/object:Gem::Version
122
103
  version: '0'
123
- none: false
124
- prerelease: false
125
104
  type: :development
126
- - !ruby/object:Gem::Dependency
127
- name: guard-rspec
105
+ prerelease: false
128
106
  version_requirements: !ruby/object:Gem::Requirement
129
107
  requirements:
130
108
  - - ! '>='
131
109
  - !ruby/object:Gem::Version
132
110
  version: '0'
133
- none: false
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
134
113
  requirement: !ruby/object:Gem::Requirement
135
114
  requirements:
136
115
  - - ! '>='
137
116
  - !ruby/object:Gem::Version
138
117
  version: '0'
139
- none: false
140
- prerelease: false
141
118
  type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
142
125
  description: A bot for starting and managing KAG Gather matches
143
126
  email:
144
127
  - splittingred@gmail.com
@@ -147,20 +130,17 @@ extensions: []
147
130
  extra_rdoc_files: []
148
131
  files:
149
132
  - readme.md
150
- - lib/gather.rb
151
- - lib/patches.rb
152
133
  - lib/commands/command.rb
153
134
  - lib/commands/commands.rb
154
135
  - lib/commands/help.rb
155
- - lib/kag/common.rb
156
- - lib/kag/config.rb
157
- - lib/kag/data.rb
158
- - lib/kag/server.rb
159
- - lib/kag/version.rb
136
+ - lib/gather.rb
160
137
  - lib/kag/bans/plugin.rb
161
138
  - lib/kag/bans/report.rb
162
139
  - lib/kag/bot/bot.rb
163
140
  - lib/kag/bot/plugin.rb
141
+ - lib/kag/common.rb
142
+ - lib/kag/config.rb
143
+ - lib/kag/data.rb
164
144
  - lib/kag/gather/match.rb
165
145
  - lib/kag/gather/plugin.rb
166
146
  - lib/kag/gather/queue.rb
@@ -168,15 +148,19 @@ files:
168
148
  - lib/kag/help/book.rb
169
149
  - lib/kag/help/plugin.rb
170
150
  - lib/kag/irc/plugin.rb
151
+ - lib/kag/server/instance.rb
171
152
  - lib/kag/stats/main.rb
172
153
  - lib/kag/stats/plugin.rb
173
154
  - lib/kag/user/plugin.rb
174
155
  - lib/kag/user/user.rb
156
+ - lib/kag/version.rb
157
+ - lib/patches.rb
175
158
  - config/config.sample.json
176
159
  homepage: https://github.com/splittingred/kag-gather
177
160
  licenses:
178
161
  - GPLv2
179
- post_install_message:
162
+ metadata: {}
163
+ post_install_message:
180
164
  rdoc_options: []
181
165
  require_paths:
182
166
  - lib
@@ -185,19 +169,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
185
169
  - - ! '>='
186
170
  - !ruby/object:Gem::Version
187
171
  version: 1.9.2
188
- none: false
189
172
  required_rubygems_version: !ruby/object:Gem::Requirement
190
173
  requirements:
191
174
  - - ! '>='
192
175
  - !ruby/object:Gem::Version
193
176
  version: 1.3.6
194
- none: false
195
177
  requirements: []
196
- rubyforge_project:
197
- rubygems_version: 1.8.25
198
- signing_key:
199
- specification_version: 3
178
+ rubyforge_project:
179
+ rubygems_version: 2.0.3
180
+ signing_key:
181
+ specification_version: 4
200
182
  summary: KAG Gather IRC Bot
201
183
  test_files: []
202
- has_rdoc:
203
- ...
data/lib/kag/server.rb DELETED
@@ -1,187 +0,0 @@
1
- require 'cinch'
2
- require 'symboltable'
3
- require 'json'
4
- require 'kagerator'
5
- require 'kag/config'
6
- require 'socket'
7
-
8
- module KAG
9
- class Server < SymbolTable
10
- def info
11
- Kagerator.server(self[:ip],self[:port])
12
- end
13
-
14
- def in_use?
15
- self.key?(:match)
16
- end
17
-
18
- def has_rcon?
19
- self[:rcon_password] and !self[:rcon_password].empty?
20
- end
21
-
22
- def socket
23
- unless self[:_socket]
24
- begin
25
- self[:_socket] = TCPSocket.new(self[:ip],self[:port])
26
- rescue Exception => e
27
- puts e.message
28
- puts e.backtrace.join("\n")
29
- end
30
- end
31
- puts self[:_]
32
- self[:_socket]
33
- end
34
-
35
- def text_join
36
- "Join \x0305#{self[:key]} - #{self[:ip]}:#{self[:port]} \x0306password #{self[:password]}\x0301 | Visit kag://#{self[:ip]}/#{self[:password]}"
37
- end
38
-
39
- def connect
40
- return true if self.connected?
41
- puts "[RCON] Attempting to get socket"
42
- unless self.socket
43
- puts "[RCON] Could not establish TCP socket to connect"
44
- return false
45
- end
46
- success = false
47
- begin
48
- self.socket.puts self[:rcon_password]
49
- z = self.socket.gets
50
- puts "[RCON] "+z.to_s
51
- z.include?("now authenticated")
52
- self[:_connected] = true
53
- success = true
54
- rescue Exception => e
55
- puts e.message
56
- puts e.backtrace.join("\n")
57
- end
58
- success
59
- end
60
-
61
- def disconnect
62
- if self[:_socket]
63
- puts "[RCON] Closing socket..."
64
- #self.socket.puts "/quit"
65
- self[:_socket].close
66
- self[:_connected] = false
67
- self.delete(:_socket)
68
- end
69
- true
70
- end
71
-
72
- def connected?
73
- self[:_connected]
74
- end
75
-
76
- def _is_newline?(line)
77
- line.empty?
78
- end
79
-
80
- def _parse_line(line)
81
- line.gsub!(/\r/,"")
82
- line.gsub!(/\n/,"")
83
- line = line.strip
84
- ep = line.index(']')
85
- if ep
86
- line = line[(ep+1)..line.length].strip
87
- else
88
- line = line[10..line.length].strip
89
- end
90
- line.gsub!(/\r/,"")
91
- line.gsub!(/\n/,"")
92
- line
93
- end
94
-
95
- def _cycle
96
- while (line = self.socket.gets)
97
- line = _parse_line(line)
98
- puts "[RCON] "+line
99
- break if (_is_newline?(line) or line.empty?)
100
- end
101
- end
102
-
103
- ##
104
- # broken
105
- #
106
- def players
107
- return false unless self.connect
108
- _command "/rcon /players"
109
-
110
- players = []
111
- while (line = self.socket.gets)
112
- puts "[RCONPRIOR] '"+line+"'"
113
- line = _parse_line(line)
114
- puts "[RCON] '"+line+"'"
115
- break if (line.empty? or line == '' or line == "\n")
116
-
117
- player = SymbolTable.new
118
-
119
- # get nick
120
- sp = line.index("[")
121
- next if sp == nil
122
- ep = line.index("]",sp)
123
- player[:nick] = line[(sp+1)..(ep-1)]
124
- line = line[ep..line.length].strip
125
-
126
- # get id
127
- sp = line.index("(")
128
- ep = line.index(")",sp)
129
- player[:id] = line[(sp+4)..(ep-1)]
130
- line = line[ep..line.length]
131
-
132
- # get ip
133
- sp = line.index("(")
134
- ep = line.index(")",sp)
135
- player[:ip] = line[(sp+4)..(ep-1)]
136
- line = line[ep..line.length]
137
-
138
- # get hwid
139
- sp = line.index("(")
140
- ep = line.index(")",sp)
141
- player[:hwid] = line[(sp+6)..(ep-1)]
142
-
143
- players << player
144
- end
145
- players
146
- end
147
-
148
- def kick(nick)
149
- return false unless self.connect
150
- self.socket.puts "/kick #{nick}"
151
- _cycle
152
- end
153
-
154
- def kick_all
155
- return false unless self.connect
156
- ps = self.players
157
- if ps
158
- ps.each do |player|
159
- _command "/kick #{player[:nick]}"
160
- end
161
- else
162
- puts "No Players found on Server #{self[:ip]}!"
163
- end
164
- _cycle
165
- end
166
-
167
- def restart_map
168
- return false unless self.connect
169
- _command "/restartmap"
170
- _cycle
171
- end
172
-
173
- def next_map
174
- return false unless self.connect
175
- _command "/nextmap"
176
- _cycle
177
- end
178
-
179
- protected
180
-
181
- def _command(cmd)
182
- return false unless self.connected?
183
- puts "[RCON] #{cmd.to_s}"
184
- self.socket.puts cmd
185
- end
186
- end
187
- end