kag-gather 1.1.1 → 1.2.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/kag/gather.rb +70 -174
- data/lib/kag/match.rb +138 -0
- data/lib/kag/server.rb +4 -0
- data/lib/kag/team.rb +62 -0
- data/lib/kag/version.rb +1 -1
- metadata +3 -1
data/lib/kag/gather.rb
CHANGED
@@ -2,6 +2,7 @@ require 'cinch'
|
|
2
2
|
require 'kag/bot'
|
3
3
|
require 'kag/config'
|
4
4
|
require 'kag/server'
|
5
|
+
require 'kag/match'
|
5
6
|
|
6
7
|
module KAG
|
7
8
|
class Gather
|
@@ -11,12 +12,21 @@ module KAG
|
|
11
12
|
KAG::Config.instance
|
12
13
|
end
|
13
14
|
|
14
|
-
attr_accessor :queue
|
15
|
+
attr_accessor :queue,:servers
|
15
16
|
|
16
17
|
def initialize(*args)
|
17
18
|
super
|
18
19
|
@queue = {}
|
19
20
|
@matches = {}
|
21
|
+
_load_servers
|
22
|
+
end
|
23
|
+
|
24
|
+
def _load_servers
|
25
|
+
@servers = {}
|
26
|
+
KAG::Config.instance[:servers].each do |k,s|
|
27
|
+
s[:key] = k
|
28
|
+
@servers[k] = KAG::Server.new(s)
|
29
|
+
end
|
20
30
|
end
|
21
31
|
|
22
32
|
#listen_to :channel, method: :channel_listen
|
@@ -24,29 +34,23 @@ module KAG
|
|
24
34
|
#end
|
25
35
|
|
26
36
|
listen_to :leaving, method: :on_leaving
|
27
|
-
def on_leaving(m,
|
28
|
-
|
29
|
-
|
37
|
+
def on_leaving(m,nick)
|
38
|
+
match = get_match_in(nick)
|
39
|
+
if match
|
40
|
+
match.remove_player(nick)
|
41
|
+
elsif @queue.key?(nick)
|
42
|
+
remove_user_from_queue(nick)
|
43
|
+
end
|
30
44
|
end
|
31
45
|
|
32
46
|
listen_to :nick, method: :on_nick
|
33
47
|
def on_nick(m)
|
34
|
-
|
48
|
+
match = get_match_in(m.user.last_nick)
|
49
|
+
if match
|
50
|
+
match.rename_player(m.user.last_nick,m.user.nick)
|
51
|
+
elsif @queue.key?(m.user.last_nick)
|
35
52
|
@queue[m.user.nick] = @queue[m.user.last_nick]
|
36
53
|
@queue.delete(m.user.last_nick)
|
37
|
-
elsif in_match(m.user.last_nick)
|
38
|
-
@matches.each do |m|
|
39
|
-
i = m[:team1].index(m.user.last_nick)
|
40
|
-
if i != nil
|
41
|
-
m[:team1].delete_at(i)
|
42
|
-
m[:team1] << m.user.nick
|
43
|
-
end
|
44
|
-
i = m[:team2].index(m.user.last_nick)
|
45
|
-
if i != nil
|
46
|
-
m[:team2].delete_at(i)
|
47
|
-
m[:team2] << m.user.nick
|
48
|
-
end
|
49
|
-
end
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
@@ -57,8 +61,13 @@ module KAG
|
|
57
61
|
|
58
62
|
match "rem", method: :evt_rem
|
59
63
|
def evt_rem(m)
|
60
|
-
|
61
|
-
|
64
|
+
match = get_match_in(m.user.nick)
|
65
|
+
if match
|
66
|
+
match.remove_player(m.user.nick)
|
67
|
+
send_channels_msg "#{nick} has left the match at #{match.server[:key]}! Find a sub!"
|
68
|
+
elsif @queue.key?(user)
|
69
|
+
remove_user_from_queue(m.user.nick)
|
70
|
+
end
|
62
71
|
end
|
63
72
|
|
64
73
|
match "list", method: :evt_list
|
@@ -67,7 +76,7 @@ module KAG
|
|
67
76
|
@queue.each do |n,u|
|
68
77
|
users << n
|
69
78
|
end
|
70
|
-
m.user.send "Queue (#{
|
79
|
+
m.user.send "Queue (#{KAG::Match.type_as_string}) [#{@queue.length}] #{users.join(", ")}"
|
71
80
|
end
|
72
81
|
|
73
82
|
match "status", method: :evt_status
|
@@ -77,16 +86,15 @@ module KAG
|
|
77
86
|
|
78
87
|
match "end", method: :evt_end
|
79
88
|
def evt_end(m)
|
80
|
-
|
81
|
-
if
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
89
|
+
match = get_match_in(m.user.nick)
|
90
|
+
if match
|
91
|
+
match.add_end_vote
|
92
|
+
if match.voted_to_end?
|
93
|
+
match.cease
|
94
|
+
@matches.delete(match.server[:key])
|
95
|
+
send_channels_msg("Match at #{match.server[:key]} finished!")
|
87
96
|
else
|
88
|
-
|
89
|
-
reply m,"End vote started, #{needed} more votes to end match at #{match_in[:server][:key]}"
|
97
|
+
reply m,"End vote started, #{match.get_needed_end_votes_left} more votes to end match at #{match.server[:key]}"
|
90
98
|
end
|
91
99
|
else
|
92
100
|
reply m,"You're not in a match, silly! Stop trying to hack me."
|
@@ -94,14 +102,14 @@ module KAG
|
|
94
102
|
end
|
95
103
|
|
96
104
|
def add_user_to_queue(m,nick)
|
97
|
-
unless @queue.key?(nick) or
|
105
|
+
unless @queue.key?(nick) or get_match_in(nick)
|
98
106
|
@queue[nick] = SymbolTable.new({
|
99
107
|
:user => User(nick),
|
100
108
|
:channel => m.channel,
|
101
109
|
:message => m.message,
|
102
110
|
:joined_at => Time.now
|
103
111
|
})
|
104
|
-
send_channels_msg "Added #{nick} to queue (#{
|
112
|
+
send_channels_msg "Added #{nick} to queue (#{KAG::Match.type_as_string}) [#{@queue.length}]"
|
105
113
|
check_for_new_match
|
106
114
|
end
|
107
115
|
end
|
@@ -109,66 +117,25 @@ module KAG
|
|
109
117
|
def remove_user_from_queue(nick)
|
110
118
|
if @queue.key?(nick)
|
111
119
|
@queue.delete(nick)
|
112
|
-
send_channels_msg "Removed #{nick} from queue (#{
|
120
|
+
send_channels_msg "Removed #{nick} from queue (#{KAG::Match.type_as_string}) [#{@queue.length}]"
|
113
121
|
end
|
114
122
|
end
|
115
123
|
|
116
|
-
def end_match(match)
|
117
|
-
if match[:server].has_rcon?
|
118
|
-
begin
|
119
|
-
match[:team1].each do |p|
|
120
|
-
match[:server].kick(p)
|
121
|
-
end
|
122
|
-
match[:team2].each do |p|
|
123
|
-
match[:server].kick(p)
|
124
|
-
end
|
125
|
-
rescue Exception => e
|
126
|
-
debug e.message
|
127
|
-
debug e.backtrace.join("\n")
|
128
|
-
end
|
129
|
-
else
|
130
|
-
debug "NO RCON, so could not kick!"
|
131
|
-
end
|
132
|
-
match[:server].disconnect
|
133
|
-
@matches.delete(match[:server][:key])
|
134
|
-
send_channels_msg("Match at #{match[:server][:key]} finished!")
|
135
|
-
end
|
136
|
-
|
137
|
-
def remove_user_from_match(nick,send_msg = true)
|
138
|
-
match = get_match_in(nick)
|
139
|
-
if match and send_msg
|
140
|
-
send_channels_msg "#{nick} has left the match at #{match[:server][:key]}! Find a sub!"
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
def in_match(nick)
|
145
|
-
get_match_in(nick)
|
146
|
-
end
|
147
|
-
|
148
124
|
def get_match_in(nick)
|
149
125
|
m = false
|
150
126
|
@matches.each do |k,match|
|
151
|
-
|
152
|
-
if match[:team1] and match[:team1].include?(nick)
|
153
|
-
m = match
|
154
|
-
elsif match[:team2] and match[:team2].include?(nick)
|
127
|
+
if match.has_player?(nick)
|
155
128
|
m = match
|
156
129
|
end
|
157
130
|
end
|
158
131
|
m
|
159
132
|
end
|
160
133
|
|
161
|
-
def get_match_type_as_string
|
162
|
-
ms = KAG::Config.instance[:match_size]
|
163
|
-
ts = (ms / 2).ceil
|
164
|
-
"#{ts.to_s}v#{ts.to_s} #{KAG::Config.instance[:match_type]}"
|
165
|
-
end
|
166
|
-
|
167
134
|
def check_for_new_match
|
168
135
|
if @queue.length >= KAG::Config.instance[:match_size]
|
169
|
-
|
136
|
+
players = []
|
170
137
|
@queue.each do |n,i|
|
171
|
-
|
138
|
+
players << n
|
172
139
|
end
|
173
140
|
|
174
141
|
server = get_unused_server
|
@@ -178,68 +145,20 @@ module KAG
|
|
178
145
|
return false
|
179
146
|
end
|
180
147
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
debug "LOWER BOUND: #{lb.to_s}"
|
191
|
-
debug "PLAYERS: #{playing.join(",")}"
|
192
|
-
|
193
|
-
team1 = playing.slice(0,lb)
|
194
|
-
team2 = playing.slice(lb,match_size)
|
195
|
-
|
196
|
-
send_channels_msg("MATCH: #{get_match_type_as_string} - \x0312#{team1.join(", ")} (Blue) \x0310vs \x0304#{team2.join(", ")} (Red) \x0301(!end when done)",false)
|
197
|
-
msg = "Join \x0305#{server[:key]} - #{server[:ip]}:#{server[:port]} \x0306password #{server[:password]}\x0301 | Visit kag://#{server[:ip]}/#{server[:password]} | "
|
198
|
-
|
199
|
-
msg = msg + " \x0303Class: " if KAG::Config.instance[:pick_classes]
|
200
|
-
classes_t1 = get_team_classes(1)
|
201
|
-
classes_t2 = get_team_classes(2)
|
202
|
-
|
203
|
-
team1.each do |p|
|
204
|
-
player_msg = msg.clone
|
205
|
-
if KAG::Config.instance[:pick_classes]
|
206
|
-
cls = classes_t1.shift
|
207
|
-
player_msg = player_msg+cls if cls and !cls.empty?
|
208
|
-
end
|
209
|
-
player_msg = player_msg+" \x0312Blue Team with: #{team1.join(", ")}"
|
210
|
-
User(p).send(player_msg) unless p.include?("player")
|
211
|
-
debug "Sent to #{p.to_s}: "+player_msg
|
212
|
-
sleep(1)
|
213
|
-
end
|
214
|
-
team2.each do |p|
|
215
|
-
player_msg = msg.clone
|
216
|
-
if KAG::Config.instance[:pick_classes]
|
217
|
-
cls = classes_t2.shift
|
218
|
-
player_msg = player_msg+cls if cls and !cls.empty?
|
219
|
-
end
|
220
|
-
player_msg = player_msg+" \x0304Red Team with: #{team2.join(", ")}"
|
221
|
-
User(p).send(player_msg) unless p.include?("player")
|
222
|
-
debug "Sent to #{p.to_s}: "+player_msg
|
223
|
-
sleep(1)
|
224
|
-
end
|
225
|
-
|
226
|
-
begin
|
227
|
-
if server.has_rcon?
|
228
|
-
server.restart_map
|
229
|
-
else
|
230
|
-
debug "Cannot restart map, no RCON!"
|
231
|
-
end
|
232
|
-
rescue Exception => e
|
233
|
-
debug e.message
|
234
|
-
debug e.backtrace.join("\n")
|
148
|
+
match = KAG::Match.new(SymbolTable.new({
|
149
|
+
:server => server,
|
150
|
+
:players => players
|
151
|
+
}))
|
152
|
+
match.start
|
153
|
+
messages = match.notify_teams_of_match_start
|
154
|
+
messages.each do |nick,msg|
|
155
|
+
User(nick.to_s).send(msg) unless nick.to_s.include?("player")
|
156
|
+
sleep(2)
|
235
157
|
end
|
158
|
+
send_channels_msg(match.text_for_match_start,false)
|
236
159
|
|
237
|
-
@
|
238
|
-
|
239
|
-
:team2 => team2,
|
240
|
-
:server => server,
|
241
|
-
:end_votes => 0
|
242
|
-
}
|
160
|
+
@queue = {}
|
161
|
+
@matches[server[:key]] = match
|
243
162
|
end
|
244
163
|
end
|
245
164
|
|
@@ -256,18 +175,11 @@ module KAG
|
|
256
175
|
end
|
257
176
|
|
258
177
|
def get_unused_server
|
259
|
-
|
260
|
-
@
|
261
|
-
|
178
|
+
server = false
|
179
|
+
@servers.each do |k,s|
|
180
|
+
server = s unless s.in_use?
|
262
181
|
end
|
263
|
-
|
264
|
-
available_servers.each do |k,s|
|
265
|
-
unless used_servers.include?(k)
|
266
|
-
s[:key] = k
|
267
|
-
return KAG::Server.new(s)
|
268
|
-
end
|
269
|
-
end
|
270
|
-
false
|
182
|
+
server
|
271
183
|
end
|
272
184
|
|
273
185
|
match "help", method: :evt_help
|
@@ -356,8 +268,8 @@ module KAG
|
|
356
268
|
def evt_restart_map(m)
|
357
269
|
if is_admin(m.user)
|
358
270
|
match = get_match_in(m.user.nick)
|
359
|
-
if match
|
360
|
-
match
|
271
|
+
if match and match.server
|
272
|
+
match.server.restart_map
|
361
273
|
end
|
362
274
|
end
|
363
275
|
end
|
@@ -365,9 +277,8 @@ module KAG
|
|
365
277
|
match /restart_map (.+)/, method: :evt_restart_map_specify
|
366
278
|
def evt_restart_map_specify(m,arg)
|
367
279
|
if is_admin(m.user)
|
368
|
-
|
369
|
-
|
370
|
-
server.next_map
|
280
|
+
if @servers[key]
|
281
|
+
@servers[key].restart_map
|
371
282
|
else
|
372
283
|
m.reply "No server found with key #{arg}"
|
373
284
|
end
|
@@ -378,8 +289,8 @@ module KAG
|
|
378
289
|
def evt_next_map(m)
|
379
290
|
if is_admin(m.user)
|
380
291
|
match = get_match_in(m.user.nick)
|
381
|
-
if match
|
382
|
-
match
|
292
|
+
if match and match.server
|
293
|
+
match.server.next_map
|
383
294
|
end
|
384
295
|
end
|
385
296
|
end
|
@@ -387,9 +298,8 @@ module KAG
|
|
387
298
|
match /next_map (.+)/, method: :evt_next_map_specify
|
388
299
|
def evt_next_map_specify(m,arg)
|
389
300
|
if is_admin(m.user)
|
390
|
-
|
391
|
-
|
392
|
-
server.next_map
|
301
|
+
if @servers[key]
|
302
|
+
@servers[key].next_map
|
393
303
|
else
|
394
304
|
m.reply "No server found with key #{arg}"
|
395
305
|
end
|
@@ -400,9 +310,8 @@ module KAG
|
|
400
310
|
def evt_kick_from_match(m,nick)
|
401
311
|
if is_admin(m.user)
|
402
312
|
match = get_match_in(nick)
|
403
|
-
if match
|
404
|
-
match
|
405
|
-
remove_user_from_match(nick,false)
|
313
|
+
if match
|
314
|
+
match.remove_player(nick)
|
406
315
|
m.reply "#{nick} has been kicked from the match"
|
407
316
|
else
|
408
317
|
m.reply "#{nick} is not in a match!"
|
@@ -410,13 +319,6 @@ module KAG
|
|
410
319
|
end
|
411
320
|
end
|
412
321
|
|
413
|
-
def get_server(key)
|
414
|
-
@matches.each do |k,m|
|
415
|
-
return m[:server] if k.to_s == key
|
416
|
-
end
|
417
|
-
false
|
418
|
-
end
|
419
|
-
|
420
322
|
match "reload_config", method: :evt_reload_config
|
421
323
|
def evt_reload_config(m)
|
422
324
|
if is_admin(m.user)
|
@@ -424,11 +326,5 @@ module KAG
|
|
424
326
|
m.reply "Configuration reloaded."
|
425
327
|
end
|
426
328
|
end
|
427
|
-
|
428
|
-
def get_team_classes(team)
|
429
|
-
classes = KAG::Config.instance[:classes]
|
430
|
-
classes.shuffle!
|
431
|
-
classes.clone
|
432
|
-
end
|
433
329
|
end
|
434
330
|
end
|
data/lib/kag/match.rb
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'cinch'
|
2
|
+
require 'symboltable'
|
3
|
+
require 'kag/config'
|
4
|
+
require 'kag/team'
|
5
|
+
|
6
|
+
module KAG
|
7
|
+
class Match < SymbolTable
|
8
|
+
|
9
|
+
def self.type_as_string
|
10
|
+
ms = KAG::Config.instance[:match_size].to_i
|
11
|
+
ts = (ms / 2).ceil
|
12
|
+
"#{ts.to_s}v#{ts.to_s} #{KAG::Config.instance[:match_type]}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def setup_teams
|
16
|
+
self[:players].shuffle!
|
17
|
+
match_size = KAG::Config.instance[:match_size].to_i
|
18
|
+
match_size = 2 if match_size < 2
|
19
|
+
|
20
|
+
lb = (match_size / 2).ceil.to_i
|
21
|
+
lb = 1 if lb < 1
|
22
|
+
|
23
|
+
debug "MATCH SIZE #{match_size.to_s}"
|
24
|
+
debug "LOWER BOUND: #{lb.to_s}"
|
25
|
+
debug "PLAYERS: #{self[:players].join(",")}"
|
26
|
+
|
27
|
+
self[:teams] = []
|
28
|
+
self[:teams] << KAG::Team.new({
|
29
|
+
:players => self[:players].slice(0,lb),
|
30
|
+
:match => self,
|
31
|
+
:color => "\x0312",
|
32
|
+
:name => "Blue"
|
33
|
+
}).setup
|
34
|
+
self[:teams] << KAG::Team.new({
|
35
|
+
:players => self[:players].slice(lb,match_size),
|
36
|
+
:match => self,
|
37
|
+
:color => "\x0304",
|
38
|
+
:name => "Red"
|
39
|
+
}).setup
|
40
|
+
self[:teams]
|
41
|
+
end
|
42
|
+
|
43
|
+
def start
|
44
|
+
self[:end_votes] = 0 unless self[:end_votes]
|
45
|
+
setup_teams
|
46
|
+
restart_map
|
47
|
+
end
|
48
|
+
|
49
|
+
def text_for_match_start
|
50
|
+
msg = "MATCH: #{KAG::Match.type_as_string} - "
|
51
|
+
self[:teams].each do |team|
|
52
|
+
msg = msg+" "+team.text_for_match_start
|
53
|
+
end
|
54
|
+
msg+" \x0301(!end when done)"
|
55
|
+
end
|
56
|
+
|
57
|
+
def notify_teams_of_match_start
|
58
|
+
messages = {}
|
59
|
+
self[:teams].each do |t|
|
60
|
+
ms = t.notify_of_match_start
|
61
|
+
ms.each do |nick,msg|
|
62
|
+
messages[nick] = msg
|
63
|
+
end
|
64
|
+
end
|
65
|
+
messages
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_end_vote
|
69
|
+
self[:end_votes] = 0 unless self[:end_votes] > 0
|
70
|
+
self[:end_votes] = self[:end_votes] + 1
|
71
|
+
end
|
72
|
+
|
73
|
+
def voted_to_end?
|
74
|
+
evt = KAG::Config.instance[:end_vote_threshold].to_i
|
75
|
+
evt = 3 if evt < 1
|
76
|
+
self[:end_votes] >= evt
|
77
|
+
end
|
78
|
+
|
79
|
+
def get_needed_end_votes_left
|
80
|
+
evt = KAG::Config.instance[:end_vote_threshold].to_i
|
81
|
+
evt - self[:end_votes]
|
82
|
+
end
|
83
|
+
|
84
|
+
def has_player?(nick)
|
85
|
+
playing = false
|
86
|
+
self[:teams].each do |team|
|
87
|
+
playing = true if team.has_player?(nick)
|
88
|
+
end
|
89
|
+
playing
|
90
|
+
end
|
91
|
+
|
92
|
+
def cease
|
93
|
+
if self.server
|
94
|
+
if self.server.has_rcon?
|
95
|
+
self[:teams].each do |team|
|
96
|
+
team.kick_all
|
97
|
+
end
|
98
|
+
else
|
99
|
+
debug "NO RCON, so could not kick!"
|
100
|
+
end
|
101
|
+
self.server.disconnect
|
102
|
+
self.server.delete(:match)
|
103
|
+
true
|
104
|
+
else
|
105
|
+
debug "No server for match defined!"
|
106
|
+
false
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def restart_map
|
111
|
+
if self.server.has_rcon?
|
112
|
+
self.server.restart_map
|
113
|
+
else
|
114
|
+
debug "Cannot restart map, no RCON defined"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def remove_player
|
119
|
+
if match.server
|
120
|
+
match.server.kick(nick)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def rename_player(last_nick,new_nick)
|
125
|
+
self[:teams].each do |team|
|
126
|
+
if team.has_player?(last_nick)
|
127
|
+
team.rename_player(last_nick,new_nick)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def debug(msg)
|
133
|
+
if KAG::Config.instance[:debug]
|
134
|
+
puts msg
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
data/lib/kag/server.rb
CHANGED
data/lib/kag/team.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'cinch'
|
2
|
+
require 'cinch/user'
|
3
|
+
require 'symboltable'
|
4
|
+
require 'kag/config'
|
5
|
+
|
6
|
+
module KAG
|
7
|
+
class Team < SymbolTable
|
8
|
+
|
9
|
+
def setup
|
10
|
+
setup_classes
|
11
|
+
puts self[:players].inspect
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def setup_classes
|
16
|
+
classes = KAG::Config.instance[:classes].clone
|
17
|
+
classes.shuffle!
|
18
|
+
players = self[:players].clone
|
19
|
+
self[:players] = {}
|
20
|
+
players.each do |p|
|
21
|
+
self[:players][p.to_sym] = classes.shift
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def notify_of_match_start
|
26
|
+
server = self.match.server
|
27
|
+
msg = "Join \x0305#{server[:key]} - #{server[:ip]}:#{server[:port]} \x0306password #{server[:password]}\x0301 | Visit kag://#{server[:ip]}/#{server[:password]} | "
|
28
|
+
msg = msg + " \x0303Class: " if KAG::Config.instance[:pick_classes]
|
29
|
+
|
30
|
+
messages = {}
|
31
|
+
self[:players].each do |nick,cls|
|
32
|
+
player_msg = msg.clone
|
33
|
+
player_msg = player_msg+cls if KAG::Config.instance[:pick_classes] and cls and !cls.empty?
|
34
|
+
player_msg = player_msg+" \x0312Blue Team with: #{self[:players].keys.join(", ")}"
|
35
|
+
messages[nick] = player_msg
|
36
|
+
end
|
37
|
+
messages
|
38
|
+
end
|
39
|
+
|
40
|
+
def text_for_match_start
|
41
|
+
"#{self[:color]}#{self[:players].keys.join(", ")} (#{self[:name]})"
|
42
|
+
end
|
43
|
+
|
44
|
+
def has_player?(nick)
|
45
|
+
self[:players].keys.include?(nick.to_sym)
|
46
|
+
end
|
47
|
+
|
48
|
+
def rename_player(last_nick,new_nick)
|
49
|
+
if has_player?(nick)
|
50
|
+
cls = self[:players][last_nick.to_sym]
|
51
|
+
self[:players].delete(last_nick.to_sym)
|
52
|
+
self[:players][new_nick.to_sym] = cls
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def kick_all
|
57
|
+
self[:players].each do |nick,cls|
|
58
|
+
self.match.server.kick(nick.to_s)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/kag/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kag-gather
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -135,7 +135,9 @@ files:
|
|
135
135
|
- lib/kag/bot.rb
|
136
136
|
- lib/kag/config.rb
|
137
137
|
- lib/kag/gather.rb
|
138
|
+
- lib/kag/match.rb
|
138
139
|
- lib/kag/server.rb
|
140
|
+
- lib/kag/team.rb
|
139
141
|
- lib/kag/version.rb
|
140
142
|
- config/config.sample.json
|
141
143
|
homepage: https://github.com/splittingred/kag-gather
|