Commit 4b7106d5 authored by mercury233's avatar mercury233

Merge branch 'master' of git.moenext.com:mycard/srvpro

parents 90d6ce38 988789c3
Pipeline #32212 passed with stages
in 17 minutes and 20 seconds
......@@ -528,12 +528,12 @@ class DataManager {
newScore.name = name;
return await this.saveRandomDuelScore(newScore);
}
async getRandomDuelScoreDisplay(name) {
async getRandomDuelScoreDisplay(name, displayName) {
const score = await this.getRandomDuelScore(name);
if (!score) {
return `${name.split("$")[0]} \${random_score_blank}`;
return `${displayName} \${random_score_blank}`;
}
return score.getScoreText();
return score.getScoreText(displayName);
}
async randomDuelPlayerWin(name) {
const score = await this.getOrCreateRandomDuelScore(name);
......
......@@ -528,12 +528,12 @@ export class DataManager {
newScore.name = name;
return await this.saveRandomDuelScore(newScore);
}
async getRandomDuelScoreDisplay(name: string) {
async getRandomDuelScoreDisplay(name: string, displayName: string) {
const score = await this.getRandomDuelScore(name);
if(!score) {
return `${name.split("$")[0]} \${random_score_blank}`;
return `${displayName} \${random_score_blank}`;
}
return score.getScoreText();
return score.getScoreText(displayName);
}
async randomDuelPlayerWin(name: string) {
const score = await this.getOrCreateRandomDuelScore(name);
......
......@@ -33,8 +33,7 @@ let RandomDuelScore = class RandomDuelScore extends CreateAndUpdateTimeBase_1.Cr
++this.fleeCount;
this.lose();
}
getScoreText() {
const displayName = this.getDisplayName();
getScoreText(displayName) {
const total = this.winCount + this.loseCount;
if (this.winCount < 2 && total < 3) {
return `${displayName} \${random_score_not_enough}`;
......
......@@ -40,8 +40,7 @@ export class RandomDuelScore extends CreateAndUpdateTimeBase {
this.lose();
}
getScoreText() {
const displayName = this.getDisplayName();
getScoreText(displayName: string) {
const total = this.winCount + this.loseCount;
if (this.winCount < 2 && total < 3) {
return `${displayName} \${random_score_not_enough}`;
......@@ -53,4 +52,4 @@ export class RandomDuelScore extends CreateAndUpdateTimeBase {
return `\${random_score_part1}${displayName} \${random_score_part2} ${Math.ceil(this.winCount / total * 100)}\${random_score_part3} ${Math.ceil(this.fleeCount / total * 100)}\${random_score_part4}`;
}
}
}
\ No newline at end of file
}
......@@ -79,6 +79,7 @@
"record_match_scores": false,
"post_match_scores": false,
"post_match_accesskey": "123456",
"disable_chat": false,
"blank_pass_modes": {
"S": true,
"M": true,
......
......@@ -178,6 +178,7 @@
"refresh_failed": "Refresh field failed.",
"banned_athletic_deck_part1": "Entertainment Mode does not allow top ",
"banned_athletic_deck_part2": " popular meta decks. Please change your deck.",
"chat_disabled": "Chat is disabled in this room.",
"using_athletic_deck": " is using a competitive deck."
},
"es-es": {
......@@ -505,6 +506,7 @@
"refresh_fail": "刷新场面失败。",
"banned_athletic_deck_part1": "娱乐匹配中禁止使用使用数前",
"banned_athletic_deck_part2": "的竞技卡组。请更换卡组。",
"chat_disabled": "本房间禁止聊天。",
"using_athletic_deck": " 正在使用竞技卡组。"
},
"ko-kr": {
......
......@@ -314,6 +314,9 @@ init = () ->
settings.modules.random_duel.blank_pass_modes = {"S":true,"M":false,"T":false}
delete settings.modules.random_duel.blank_pass_match
imported = true
if settings.modules.hide_name == true
settings.modules.hide_name = "start"
imported = true
#finish
keysFromEnv = Object.keys(process.env).filter((key) => key.startsWith('SRVPRO_'))
if keysFromEnv.length > 0
......@@ -706,10 +709,10 @@ ROOM_player_flee = global.ROOM_player_flee = (name)->
await dataManager.randomDuelPlayerFlee(name)
return
ROOM_player_get_score = global.ROOM_player_get_score = (player)->
ROOM_player_get_score = global.ROOM_player_get_score = (player, display_name)->
if !settings.modules.mysql.enabled
return ""
return await dataManager.getRandomDuelScoreDisplay(player.name_vpass)
return await dataManager.getRandomDuelScoreDisplay(player.name_vpass, display_name)
ROOM_find_or_create_by_name = global.ROOM_find_or_create_by_name = (name, player_ip)->
uname=name.toUpperCase()
......@@ -919,7 +922,7 @@ CLIENT_reconnect_register = global.CLIENT_reconnect_register = (client, room_id,
dinfo.timeout = tmot
disconnect_list[CLIENT_get_authorize_key(client)] = dinfo
#console.log("#{client.name} ${disconnect_from_game}")
ygopro.stoc_send_chat_to_room(room, "#{client.name} ${disconnect_from_game}" + if error then ": #{error}" else '')
ygopro.stoc_send_chat_to_room(room, "#{room.getMaskedPlayerName(client)} ${disconnect_from_game}" + if error then ": #{error}" else '')
if client.time_confirm_required
client.time_confirm_required = false
ygopro.ctos_send(client.server, 'TIME_CONFIRM')
......@@ -1012,7 +1015,7 @@ CLIENT_send_pre_reconnect_info = global.CLIENT_send_pre_reconnect_info = (client
})
for player in room.players
ygopro.stoc_send(client, 'HS_PLAYER_ENTER', {
name: player.name,
name: room.getMaskedPlayerName(player, old_client),
pos: player.pos,
padding: 0,
})
......@@ -1082,7 +1085,7 @@ CLIENT_reconnect = global.CLIENT_reconnect = (client) ->
CLIENT_import_data(client, dinfo.old_client, room)
CLIENT_send_reconnect_info(client, client.server, room)
#console.log("#{client.name} ${reconnect_to_game}")
ygopro.stoc_send_chat_to_room(room, "#{client.name} ${reconnect_to_game}")
ygopro.stoc_send_chat_to_room(room, "#{room.getMaskedPlayerName(client)} ${reconnect_to_game}")
CLIENT_reconnect_unregister(client, true)
return
......@@ -1661,7 +1664,7 @@ class Room
if settings.modules.random_duel.record_match_scores and @random_type == 'M'
ROOM_player_flee(client.name_vpass)
if @players.length and !(@windbot and client.is_host) and !(@arena and @duel_stage == ygopro.constants.DUEL_STAGE.BEGIN and client.pos <= 3)
left_name = (if settings.modules.hide_name and @duel_stage == ygopro.constants.DUEL_STAGE.BEGIN then "********" else client.name)
left_name = @getMaskedPlayerName(client)
ygopro.stoc_send_chat_to_room this, "#{left_name} ${left_game}" + if error then ": #{error}" else ''
roomlist.update(this) if !@windbot and @duel_stage == ygopro.constants.DUEL_STAGE.BEGIN and settings.modules.http.websocket_roomlist
#client.room = null
......@@ -1671,7 +1674,7 @@ class Room
#client.room = null
this.delete()
if !CLIENT_reconnect_unregister(client, false, true)
SERVER_kick(client.server)
SERVER_kick(client.server)
return
start_death: () ->
......@@ -1817,6 +1820,13 @@ class Room
@watcher_buffers.push chat_buf
return
getMaskedPlayerName: (player, sight_player) ->
if not settings.modules.hide_name or (sight_player and player == sight_player) or not (@random_type or @arena)
return player.name
if (@duel_stage == ygopro.constants.DUEL_STAGE.BEGIN and settings.modules.hide_name == "start") or settings.modules.hide_name == "always"
return "Player #{player.pos + 1}"
return player.name
# 网络连接
netRequestHandler = (client) ->
if !client.isWs
......@@ -2435,9 +2445,10 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server, datas)->
#client.score_shown = true
return
if settings.modules.random_duel.record_match_scores and room.random_type == 'M'
ygopro.stoc_send_chat_to_room(room, await ROOM_player_get_score(client), ygopro.constants.COLORS.GREEN)
for player in room.players when player.pos != 7
ygopro.stoc_send_chat(player, await ROOM_player_get_score(client, room.getMaskedPlayerName(client, player)), ygopro.constants.COLORS.GREEN)
for player in room.players when player.pos != 7 and player != client
ygopro.stoc_send_chat(client, await ROOM_player_get_score(player), ygopro.constants.COLORS.GREEN)
ygopro.stoc_send_chat(client, await ROOM_player_get_score(player, room.getMaskedPlayerName(player, client)), ygopro.constants.COLORS.GREEN)
if !room.recorder
room.recorder = recorder = net.connect room.port, ->
ygopro.ctos_send recorder, 'PLAYER_INFO', {
......@@ -2816,13 +2827,13 @@ ygopro.stoc_follow 'TYPE_CHANGE', true, (buffer, info, client, server, datas)->
ygopro.stoc_follow 'HS_PLAYER_ENTER', true, (buffer, info, client, server, datas)->
room=ROOM_all[client.rid]
return false unless room and settings.modules.hide_name and room.duel_stage == ygopro.constants.DUEL_STAGE.BEGIN
pos = info.pos
if pos < 4 and pos != client.pos
struct = ygopro.structs.get("STOC_HS_PlayerEnter")
struct._setBuff(buffer)
struct.set("name", "********")
buffer = struct.buffer
if room and (room.random_type or room.arena) and settings.modules.hide_name and room.duel_stage == ygopro.constants.DUEL_STAGE.BEGIN
pos = info.pos
if pos < 4 and pos != client.pos
struct = ygopro.structs.get("STOC_HS_PlayerEnter")
struct._setBuff(buffer)
struct.set("name", "Player " + (pos + 1))
buffer = struct.buffer
await return false
ygopro.stoc_follow 'HS_PLAYER_CHANGE', true, (buffer, info, client, server, datas)->
......@@ -2925,7 +2936,7 @@ wait_room_start_arena = (room)->
if room.waiting_for_player_time > 0
unless room.waiting_for_player_time % 5
for player in room.players when player
display_name = (if settings.modules.hide_name and player != room.waiting_for_player then "********" else room.waiting_for_player.name)
display_name = room.getMaskedPlayerName(player, room.waiting_for_player)
ygopro.stoc_send_chat(player, "#{if room.waiting_for_player_time <= 9 then ' ' else ''}#{room.waiting_for_player_time}${kick_count_down_arena_part1} #{display_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)
......@@ -2991,7 +3002,7 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server, datas)->
clearInterval client.side_interval
client.side_interval = null
client.side_tcount = null
if settings.modules.hide_name and room.duel_count == 0
if settings.modules.hide_name == "start" and room.duel_count == 0
for player in room.get_playing_player() when player != client
ygopro.stoc_send(client, 'HS_PLAYER_ENTER', {
name: player.name,
......@@ -3187,6 +3198,9 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
ygopro.stoc_send_chat_to_room(room, "#{client.name}: #{msg}", 9)
return true
return cancel
if room.random_type and settings.modules.random_duel.disable_chat
ygopro.stoc_send_chat(client, "${chat_disabled}", ygopro.constants.COLORS.BABYBLUE)
return true
if client.abuse_count>=5 or CLIENT_is_banned_by_mc(client)
log.warn "BANNED CHAT", client.name, client.ip, msg
ygopro.stoc_send_chat(client, "${banned_chat_tip}" + (if client.ban_mc and client.ban_mc.message then (": " + client.ban_mc.message) else ""), ygopro.constants.COLORS.RED)
......
......@@ -415,6 +415,10 @@
delete settings.modules.random_duel.blank_pass_match;
imported = true;
}
if (settings.modules.hide_name === true) {
settings.modules.hide_name = "start";
imported = true;
}
//finish
keysFromEnv = Object.keys(process.env).filter((key) => {
return key.startsWith('SRVPRO_');
......@@ -912,11 +916,11 @@
await dataManager.randomDuelPlayerFlee(name);
};
ROOM_player_get_score = global.ROOM_player_get_score = async function(player) {
ROOM_player_get_score = global.ROOM_player_get_score = async function(player, display_name) {
if (!settings.modules.mysql.enabled) {
return "";
}
return (await dataManager.getRandomDuelScoreDisplay(player.name_vpass));
return (await dataManager.getRandomDuelScoreDisplay(player.name_vpass, display_name));
};
ROOM_find_or_create_by_name = global.ROOM_find_or_create_by_name = async function(name, player_ip) {
......@@ -1205,7 +1209,7 @@
dinfo.timeout = tmot;
disconnect_list[CLIENT_get_authorize_key(client)] = dinfo;
//console.log("#{client.name} ${disconnect_from_game}")
ygopro.stoc_send_chat_to_room(room, `${client.name} \${disconnect_from_game}` + (error ? `: ${error}` : ''));
ygopro.stoc_send_chat_to_room(room, `${room.getMaskedPlayerName(client)} \${disconnect_from_game}` + (error ? `: ${error}` : ''));
if (client.time_confirm_required) {
client.time_confirm_required = false;
ygopro.ctos_send(client.server, 'TIME_CONFIRM');
......@@ -1357,7 +1361,7 @@
for (j = 0, len = ref.length; j < len; j++) {
player = ref[j];
ygopro.stoc_send(client, 'HS_PLAYER_ENTER', {
name: player.name,
name: room.getMaskedPlayerName(player, old_client),
pos: player.pos,
padding: 0
});
......@@ -1437,7 +1441,7 @@
CLIENT_import_data(client, dinfo.old_client, room);
CLIENT_send_reconnect_info(client, client.server, room);
//console.log("#{client.name} ${reconnect_to_game}")
ygopro.stoc_send_chat_to_room(room, `${client.name} \${reconnect_to_game}`);
ygopro.stoc_send_chat_to_room(room, `${room.getMaskedPlayerName(client)} \${reconnect_to_game}`);
CLIENT_reconnect_unregister(client, true);
};
......@@ -2223,7 +2227,7 @@
}
}
if (this.players.length && !(this.windbot && client.is_host) && !(this.arena && this.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN && client.pos <= 3)) {
left_name = (settings.modules.hide_name && this.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN ? "********" : client.name);
left_name = this.getMaskedPlayerName(client);
ygopro.stoc_send_chat_to_room(this, `${left_name} \${left_game}` + (error ? `: ${error}` : ''));
if (!this.windbot && this.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN && settings.modules.http.websocket_roomlist) {
roomlist.update(this);
......@@ -2458,6 +2462,16 @@
}
}
getMaskedPlayerName(player, sight_player) {
if (!settings.modules.hide_name || (sight_player && player === sight_player) || !(this.random_type || this.arena)) {
return player.name;
}
if ((this.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN && settings.modules.hide_name === "start") || settings.modules.hide_name === "always") {
return `Player ${player.pos + 1}`;
}
return player.name;
}
};
// 网络连接
......@@ -3162,7 +3176,7 @@
});
ygopro.stoc_follow('JOIN_GAME', false, async function(buffer, info, client, server, datas) {
var j, len, player, recorder, ref, room, watcher;
var j, l, len, len1, player, recorder, ref, ref1, room, watcher;
//欢迎信息
room = ROOM_all[client.rid];
if (!(room && !client.reconnecting)) {
......@@ -3199,12 +3213,18 @@
}
//client.score_shown = true
if (settings.modules.random_duel.record_match_scores && room.random_type === 'M') {
ygopro.stoc_send_chat_to_room(room, (await ROOM_player_get_score(client)), ygopro.constants.COLORS.GREEN);
ref = room.players;
for (j = 0, len = ref.length; j < len; j++) {
player = ref[j];
if (player.pos !== 7) {
ygopro.stoc_send_chat(player, (await ROOM_player_get_score(client, room.getMaskedPlayerName(client, player))), ygopro.constants.COLORS.GREEN);
}
}
ref1 = room.players;
for (l = 0, len1 = ref1.length; l < len1; l++) {
player = ref1[l];
if (player.pos !== 7 && player !== client) {
ygopro.stoc_send_chat(client, (await ROOM_player_get_score(player)), ygopro.constants.COLORS.GREEN);
ygopro.stoc_send_chat(client, (await ROOM_player_get_score(player, room.getMaskedPlayerName(player, client))), ygopro.constants.COLORS.GREEN);
}
}
}
......@@ -3240,15 +3260,15 @@
ygopro.ctos_send(watcher, 'HS_TOOBSERVER');
});
watcher.on('data', function(data) {
var l, len1, ref1, w;
var len2, m, ref2, w;
room = ROOM_all[client.rid];
if (!room) {
return;
}
room.watcher_buffers.push(data);
ref1 = room.watchers;
for (l = 0, len1 = ref1.length; l < len1; l++) {
w = ref1[l];
ref2 = room.watchers;
for (m = 0, len2 = ref2.length; m < len2; m++) {
w = ref2[m];
if (w) { //a WTF fix
ygopro.helper.send(w, data);
}
......@@ -3719,15 +3739,14 @@
ygopro.stoc_follow('HS_PLAYER_ENTER', true, async function(buffer, info, client, server, datas) {
var pos, room, struct;
room = ROOM_all[client.rid];
if (!(room && settings.modules.hide_name && room.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN)) {
return false;
}
pos = info.pos;
if (pos < 4 && pos !== client.pos) {
struct = ygopro.structs.get("STOC_HS_PlayerEnter");
struct._setBuff(buffer);
struct.set("name", "********");
buffer = struct.buffer;
if (room && (room.random_type || room.arena) && settings.modules.hide_name && room.duel_stage === ygopro.constants.DUEL_STAGE.BEGIN) {
pos = info.pos;
if (pos < 4 && pos !== client.pos) {
struct = ygopro.structs.get("STOC_HS_PlayerEnter");
struct._setBuff(buffer);
struct.set("name", "Player " + (pos + 1));
buffer = struct.buffer;
}
}
return false;
});
......@@ -3895,7 +3914,7 @@
if (!(player)) {
continue;
}
display_name = (settings.modules.hide_name && player !== room.waiting_for_player ? "********" : room.waiting_for_player.name);
display_name = room.getMaskedPlayerName(player, room.waiting_for_player);
ygopro.stoc_send_chat(player, `${room.waiting_for_player_time <= 9 ? ' ' : ''}${room.waiting_for_player_time}\${kick_count_down_arena_part1} ${display_name} \${kick_count_down_arena_part2}`, room.waiting_for_player_time <= 9 ? ygopro.constants.COLORS.RED : ygopro.constants.COLORS.LIGHTBLUE);
}
}
......@@ -3992,7 +4011,7 @@
client.side_tcount = null;
}
}
if (settings.modules.hide_name && room.duel_count === 0) {
if (settings.modules.hide_name === "start" && room.duel_count === 0) {
ref1 = room.get_playing_player();
for (l = 0, len1 = ref1.length; l < len1; l++) {
player = ref1[l];
......@@ -4276,6 +4295,10 @@
}
return cancel;
}
if (room.random_type && settings.modules.random_duel.disable_chat) {
ygopro.stoc_send_chat(client, "${chat_disabled}", ygopro.constants.COLORS.BABYBLUE);
return true;
}
if (client.abuse_count >= 5 || CLIENT_is_banned_by_mc(client)) {
log.warn("BANNED CHAT", client.name, client.ip, msg);
ygopro.stoc_send_chat(client, "${banned_chat_tip}" + (client.ban_mc && client.ban_mc.message ? ": " + client.ban_mc.message : ""), ygopro.constants.COLORS.RED);
......
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