Commit 0d5b65e0 authored by mercury233's avatar mercury233

fix player ready kick count down

parent 1bd2d955
......@@ -152,6 +152,8 @@
"kicked_by_player": "被请出了房间",
"kicked_by_system": "被系统请出了房间",
"kick_count_down": "秒后房主若不开始游戏将被请出房间",
"kick_count_down_arena_part1": "秒后",
"kick_count_down_arena_part2": "若不准备或开始游戏将视为投降",
"chat_order_main": "Mycard YGOPro Server 指令帮助",
"chat_order_help": "/help 显示这个帮助信息",
"chat_order_roomname": "/roomname 显示当前房间的名字",
......
......@@ -1340,6 +1340,35 @@ ygopro.stoc_follow 'HS_PLAYER_CHANGE', false, (buffer, info, client, server)->
pos = info.status >> 4
is_ready = (info.status & 0xf) == 9
if pos < room.max_player
if room.arena
room.ready_player_count = 0
for player in room.players
if player.pos == pos
player.is_ready = is_ready
p1 = room.players[0]
p2 = room.players[1]
if !p1 or !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 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
......@@ -1366,6 +1395,20 @@ wait_room_start = (room, time)->
player.destroy()
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
ygopro.stoc_send_random_tip = (client)->
if settings.modules.tips.enabled && settings.tips.length
......
// Generated by CoffeeScript 1.12.2
(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');
......@@ -1604,7 +1604,7 @@
});
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];
if (!(room && room.max_player && client.is_host)) {
return;
......@@ -1612,13 +1612,54 @@
pos = info.status >> 4;
is_ready = (info.status & 0xf) === 9;
if (pos < room.max_player) {
room.ready_player_count_without_host = 0;
if (room.arena) {
room.ready_player_count = 0;
ref = room.players;
for (j = 0, len = ref.length; j < len; j++) {
player = ref[j];
if (player.pos === pos) {
player.is_ready = is_ready;
}
}
p1 = room.players[0];
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;
}
......@@ -1629,6 +1670,7 @@
}), 1000);
}
}
}
});
wait_room_start = function(room, time) {
......@@ -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) {
if (settings.modules.tips.enabled && 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