Commit 0d5b65e0 authored by mercury233's avatar mercury233

fix player ready kick count down

parent 1bd2d955
...@@ -152,6 +152,8 @@ ...@@ -152,6 +152,8 @@
"kicked_by_player": "被请出了房间", "kicked_by_player": "被请出了房间",
"kicked_by_system": "被系统请出了房间", "kicked_by_system": "被系统请出了房间",
"kick_count_down": "秒后房主若不开始游戏将被请出房间", "kick_count_down": "秒后房主若不开始游戏将被请出房间",
"kick_count_down_arena_part1": "秒后",
"kick_count_down_arena_part2": "若不准备或开始游戏将视为投降",
"chat_order_main": "Mycard YGOPro Server 指令帮助", "chat_order_main": "Mycard YGOPro Server 指令帮助",
"chat_order_help": "/help 显示这个帮助信息", "chat_order_help": "/help 显示这个帮助信息",
"chat_order_roomname": "/roomname 显示当前房间的名字", "chat_order_roomname": "/roomname 显示当前房间的名字",
......
...@@ -1340,15 +1340,44 @@ ygopro.stoc_follow 'HS_PLAYER_CHANGE', false, (buffer, info, client, server)-> ...@@ -1340,15 +1340,44 @@ ygopro.stoc_follow 'HS_PLAYER_CHANGE', false, (buffer, info, client, server)->
pos = info.status >> 4 pos = info.status >> 4
is_ready = (info.status & 0xf) == 9 is_ready = (info.status & 0xf) == 9
if pos < room.max_player if pos < room.max_player
room.ready_player_count_without_host = 0 if room.arena
for player in room.players room.ready_player_count = 0
if player.pos == pos for player in room.players
player.is_ready = is_ready if player.pos == pos
unless player.is_host player.is_ready = is_ready
room.ready_player_count_without_host += player.is_ready p1 = room.players[0]
if room.ready_player_count_without_host >= room.max_player - 1 p2 = room.players[1]
#log.info "all ready" if !p1 or !p2
setTimeout (()-> wait_room_start(ROOM_all[client.rid], 20);return), 1000 if room.waiting_for_player_interval
clearInterval room.waiting_for_player_interval
room.waiting_for_player_interval = null
return
room.waiting_for_player2 = room.waiting_for_player
room.waiting_for_player = null
if p1.is_ready and p2.is_ready
room.waiting_for_player = if p1.is_host then p1 else p2
if !p1.is_ready and p2.is_ready
room.waiting_for_player = p1
if !p2.is_ready and p1.is_ready
room.waiting_for_player = p2
if room.waiting_for_player != room.waiting_for_player2
room.waiting_for_player2 = room.waiting_for_player
room.waiting_for_player_time = 20
room.waiting_for_player_interval = setInterval (()-> wait_room_start_arena(ROOM_all[client.rid]);return), 1000
else if !room.waiting_for_player and room.waiting_for_player_interval
clearInterval room.waiting_for_player_interval
room.waiting_for_player_interval = null
room.waiting_for_player_time = 20
else
room.ready_player_count_without_host = 0
for player in room.players
if player.pos == pos
player.is_ready = is_ready
unless player.is_host
room.ready_player_count_without_host += player.is_ready
if room.ready_player_count_without_host >= room.max_player - 1
#log.info "all ready"
setTimeout (()-> wait_room_start(ROOM_all[client.rid], 20);return), 1000
return return
wait_room_start = (room, time)-> wait_room_start = (room, time)->
...@@ -1366,6 +1395,20 @@ wait_room_start = (room, time)-> ...@@ -1366,6 +1395,20 @@ wait_room_start = (room, time)->
player.destroy() player.destroy()
return return
wait_room_start_arena = (room)->
unless !room or room.started or !room.waiting_for_player
room.waiting_for_player_time = room.waiting_for_player_time - 1
if room.waiting_for_player_time > 0
unless room.waiting_for_player_time % 5
ygopro.stoc_send_chat_to_room(room, "#{if room.waiting_for_player_time <= 9 then ' ' else ''}#{room.waiting_for_player_time}${kick_count_down_arena_part1} #{room.waiting_for_player.name} ${kick_count_down_arena_part2}", if room.waiting_for_player_time <= 9 then ygopro.constants.COLORS.RED else ygopro.constants.COLORS.LIGHTBLUE)
else
ygopro.stoc_send_chat_to_room(room, "#{room.waiting_for_player.name} ${kicked_by_system}", ygopro.constants.COLORS.RED)
room.waiting_for_player.destroy()
if room.waiting_for_player_interval
clearInterval room.waiting_for_player_interval
room.waiting_for_player_interval = null
return
#tip #tip
ygopro.stoc_send_random_tip = (client)-> ygopro.stoc_send_random_tip = (client)->
if settings.modules.tips.enabled && settings.tips.length if settings.modules.tips.enabled && settings.tips.length
......
// Generated by CoffeeScript 1.12.2 // Generated by CoffeeScript 1.12.2
(function() { (function() {
var Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, _, addCallback, ban_user, bunyan, cppversion, crypto, date, defaultconfig, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, list, load_dialogues, load_tips, log, moment, nconf, net, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, report_to_big_brother, request, requestListener, roomlist, settings, spawn, spawnSync, url, users_cache, wait_room_start, windbot_bin, windbot_parameters, windbot_process, ygopro, zlib; var Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, _, addCallback, ban_user, bunyan, cppversion, crypto, date, defaultconfig, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, list, load_dialogues, load_tips, log, moment, nconf, net, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, report_to_big_brother, request, requestListener, roomlist, settings, spawn, spawnSync, url, users_cache, wait_room_start, wait_room_start_arena, windbot_bin, windbot_parameters, windbot_process, ygopro, zlib;
net = require('net'); net = require('net');
...@@ -1604,7 +1604,7 @@ ...@@ -1604,7 +1604,7 @@
}); });
ygopro.stoc_follow('HS_PLAYER_CHANGE', false, function(buffer, info, client, server) { ygopro.stoc_follow('HS_PLAYER_CHANGE', false, function(buffer, info, client, server) {
var is_ready, j, len, player, pos, ref, room; var is_ready, j, k, len, len1, p1, p2, player, pos, ref, ref1, room;
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
if (!(room && room.max_player && client.is_host)) { if (!(room && room.max_player && client.is_host)) {
return; return;
...@@ -1612,21 +1612,63 @@ ...@@ -1612,21 +1612,63 @@
pos = info.status >> 4; pos = info.status >> 4;
is_ready = (info.status & 0xf) === 9; is_ready = (info.status & 0xf) === 9;
if (pos < room.max_player) { if (pos < room.max_player) {
room.ready_player_count_without_host = 0; if (room.arena) {
ref = room.players; room.ready_player_count = 0;
for (j = 0, len = ref.length; j < len; j++) { ref = room.players;
player = ref[j]; for (j = 0, len = ref.length; j < len; j++) {
if (player.pos === pos) { player = ref[j];
player.is_ready = is_ready; if (player.pos === pos) {
player.is_ready = is_ready;
}
} }
if (!player.is_host) { p1 = room.players[0];
room.ready_player_count_without_host += player.is_ready; p2 = room.players[1];
if (!p1 || !p2) {
if (room.waiting_for_player_interval) {
clearInterval(room.waiting_for_player_interval);
room.waiting_for_player_interval = null;
}
return;
}
room.waiting_for_player2 = room.waiting_for_player;
room.waiting_for_player = null;
if (p1.is_ready && p2.is_ready) {
room.waiting_for_player = p1.is_host ? p1 : p2;
}
if (!p1.is_ready && p2.is_ready) {
room.waiting_for_player = p1;
}
if (!p2.is_ready && p1.is_ready) {
room.waiting_for_player = p2;
}
if (room.waiting_for_player !== room.waiting_for_player2) {
room.waiting_for_player2 = room.waiting_for_player;
room.waiting_for_player_time = 20;
room.waiting_for_player_interval = setInterval((function() {
wait_room_start_arena(ROOM_all[client.rid]);
}), 1000);
} else if (!room.waiting_for_player && room.waiting_for_player_interval) {
clearInterval(room.waiting_for_player_interval);
room.waiting_for_player_interval = null;
room.waiting_for_player_time = 20;
}
} else {
room.ready_player_count_without_host = 0;
ref1 = room.players;
for (k = 0, len1 = ref1.length; k < len1; k++) {
player = ref1[k];
if (player.pos === pos) {
player.is_ready = is_ready;
}
if (!player.is_host) {
room.ready_player_count_without_host += player.is_ready;
}
}
if (room.ready_player_count_without_host >= room.max_player - 1) {
setTimeout((function() {
wait_room_start(ROOM_all[client.rid], 20);
}), 1000);
} }
}
if (room.ready_player_count_without_host >= room.max_player - 1) {
setTimeout((function() {
wait_room_start(ROOM_all[client.rid], 20);
}), 1000);
} }
} }
}); });
...@@ -1656,6 +1698,24 @@ ...@@ -1656,6 +1698,24 @@
} }
}; };
wait_room_start_arena = function(room) {
if (!(!room || room.started || !room.waiting_for_player)) {
room.waiting_for_player_time = room.waiting_for_player_time - 1;
if (room.waiting_for_player_time > 0) {
if (!(room.waiting_for_player_time % 5)) {
ygopro.stoc_send_chat_to_room(room, "" + (room.waiting_for_player_time <= 9 ? ' ' : '') + room.waiting_for_player_time + "${kick_count_down_arena_part1} " + room.waiting_for_player.name + " ${kick_count_down_arena_part2}", room.waiting_for_player_time <= 9 ? ygopro.constants.COLORS.RED : ygopro.constants.COLORS.LIGHTBLUE);
}
} else {
ygopro.stoc_send_chat_to_room(room, room.waiting_for_player.name + " ${kicked_by_system}", ygopro.constants.COLORS.RED);
room.waiting_for_player.destroy();
if (room.waiting_for_player_interval) {
clearInterval(room.waiting_for_player_interval);
room.waiting_for_player_interval = null;
}
}
}
};
ygopro.stoc_send_random_tip = function(client) { ygopro.stoc_send_random_tip = function(client) {
if (settings.modules.tips.enabled && settings.tips.length) { if (settings.modules.tips.enabled && settings.tips.length) {
ygopro.stoc_send_chat(client, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)]); ygopro.stoc_send_chat(client, "Tip: " + settings.tips[Math.floor(Math.random() * settings.tips.length)]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment