Commit 57d97b02 authored by JoyJ's avatar JoyJ

update diceroll & dc-random

parent d13087a5
ygopro.ctos_follow_before('CHAT', false, async function (buffer, info, client, server, datas) { ygopro.ctos_follow_before(
"CHAT",
false,
async function (buffer, info, client, server, datas) {
var room = ROOM_all[client.rid]; var room = ROOM_all[client.rid];
if (room.rolls == undefined) if (room.rolls == undefined) {
{
room.rolls = new Object(); room.rolls = new Object();
} }
var msg = _.trim(info.msg); var msg = _.trim(info.msg);
if (msg.substring(0, 5) == "/dice") if (msg.substring(0, 5) == "/dice") {
{ var diceresult = Math.floor(Math.random() * 6) + 1;
var diceresult = Math.floor(Math.random()*6) + 1;
var dicemessage = client.name + "投掷1d6并掷出了" + diceresult + ""; var dicemessage = client.name + "投掷1d6并掷出了" + diceresult + "";
ygopro.stoc_send_chat_to_room(room, dicemessage, ygopro.constants.COLORS.PINK); ygopro.stoc_send_chat_to_room(
room,
dicemessage,
ygopro.constants.COLORS.PINK
);
return; return;
} }
if (msg.substring(0, 5) == "/coin") if (msg.substring(0, 5) == "/coin") {
{ var coinresult = Math.floor(Math.random() * 2) == 1 ? "正面" : "反面";
var coinresult = Math.floor(Math.random()*2) == 1 ? "正面" : "反面";
var coinmessage = client.name + "投掷硬币并掷出了" + coinresult; var coinmessage = client.name + "投掷硬币并掷出了" + coinresult;
ygopro.stoc_send_chat_to_room(room, coinmessage, ygopro.constants.COLORS.BLUE); ygopro.stoc_send_chat_to_room(
room,
coinmessage,
ygopro.constants.COLORS.BLUE
);
return; return;
} }
if (msg.substring(0, 5) != "/roll") { if (msg.substring(0, 5) != "/roll") {
return; return;
} }
var regex = /[0-9]*d[0-9]+/; var regex = /[0-9]*d[0-9]+/;
var found = regex.exec(msg); var regex2 = /[0-9]*d[0-9]+[\+][0-9]+/;
var regex2m = /[0-9]*d[0-9]+[\-][0-9]+/;
var found2 = regex2.exec(msg);
var found2m = regex2m.exec(msg);
var dicenum = 1; var dicenum = 1;
var dicemax = 100; var dicemax = 100;
if (found) var diceadd = 0;
{ if (found2) {
found2 = found2.toString();
var split = found2.split("+");
diceadd = split[1];
msg = split[0];
}
if (found2m) {
found2m = found2m.toString();
var split = found2.split("-");
diceadd = -split[1];
msg = split[0];
}
var found = regex.exec(msg);
if (found) {
found = found.toString(); found = found.toString();
var split = found.split('d'); var split = found.split("d");
dicenum = split[0]; dicenum = split[0];
dicemax = split[1]; dicemax = split[1];
} }
if (dicenum > 100) if (dicenum > 100) dicenum = 100;
dicenum = 100; if (dicenum < 1) dicenum = 1;
if (dicenum < 1) if (dicemax > 60000) dicemax = 60000;
dicenum = 1; if (dicemax < 1) dicemax = 1;
if (dicemax > 60000) if (diceadd > 1000000) diceadd = 1000000;
dicemax = 60000; if (diceadd < -1000000) diceadd = -1000000;
if (dicemax < 1)
dicemax = 1;
var result = 0; var result = 0;
for (var i=0;i<dicenum;i++) for (var i = 0; i < dicenum; i++) {
{ result += Math.floor(Math.random() * dicemax) + 1;
result += Math.floor(Math.random()*dicemax) + 1;
} }
result += diceadd;
var name = client.name; var name = client.name;
var message = name + "投掷" + dicenum + "d" + dicemax + "并掷出了" + result + ""; var message =
name + "投掷" + dicenum + "d" + dicemax + "并掷出了" + result + "";
log.warn(message); log.warn(message);
if (room.rolls[name] == undefined) if (room.rolls[client.ip] == undefined) {
{ if (dicenum == 1 && dicemax == 100 && diceadd == 0) {
if (dicenum == 1 || dicemax == 100) room.rolls[client.ip] = result;
{ ygopro.stoc_send_chat_to_room(
room.rolls[name] = result; room,
ygopro.stoc_send_chat_to_room(room, message, ygopro.constants.COLORS.YELLOW); message,
ygopro.constants.COLORS.YELLOW
);
} else {
ygopro.stoc_send_chat_to_room(
room,
message,
ygopro.constants.COLORS.BABYBLUE
);
} }
else } else {
{ message = message + ";首次1d100投掷为" + room.rolls[client.ip] + "";
ygopro.stoc_send_chat_to_room(room, message, ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat_to_room(
} room,
} message,
else ygopro.constants.COLORS.BABYBLUE
{ );
message = message + ";首次1d100投掷为" + room.rolls[name] + "";
ygopro.stoc_send_chat_to_room(room, message, ygopro.constants.COLORS.BABYBLUE);
} }
return true; return true;
}); }
\ No newline at end of file );
ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, server, datas) => { ygopro.ctos_follow_after(
"UPDATE_DECK",
true,
async (buffer, info, client, server, datas) => {
var room = ROOM_all[client.rid]; var room = ROOM_all[client.rid];
if (!room) { if (!room) {
return null; return null;
...@@ -10,10 +13,11 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve ...@@ -10,10 +13,11 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve
return null; return null;
} }
var room_parameters = room.name.split('#', 2)[0].split(/[,,]/); //房间名的参数 var room_parameters = room.name.split("#", 2)[0].split(/[,,]/); //房间名的参数
var MirrorMode = false; var MirrorMode = false;
for(var parameter of room_parameters) { for (var parameter of room_parameters) {
if (parameter.toUpperCase() == "MM") { //关键字[MM] if (parameter.toUpperCase() == "MM") {
//关键字[MM]
MirrorMode = true; MirrorMode = true;
break; break;
} }
...@@ -28,14 +32,13 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve ...@@ -28,14 +32,13 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve
room.mm_deck = global.dc_decks_main[deckindex]; room.mm_deck = global.dc_decks_main[deckindex];
room.mm_side = global.dc_decks_side[deckindex]; room.mm_side = global.dc_decks_side[deckindex];
room.mm_md5 = global.dc_decks_md5[deckindex]; room.mm_md5 = global.dc_decks_md5[deckindex];
MirrorMode=false; MirrorMode = false;
} }
client.main = room.mm_deck; client.main = room.mm_deck;
client.side = room.mm_side; client.side = room.mm_side;
var compat_deckbuf = client.main.concat(client.side); var compat_deckbuf = client.main.concat(client.side);
client.deckMd5 = room.mm_md5; client.deckMd5 = room.mm_md5;
} } else {
else {
global.dc_decks_index++; global.dc_decks_index++;
if (global.dc_decks_index == global.dc_decks_index_max) { if (global.dc_decks_index == global.dc_decks_index_max) {
global.dc_decks_index = 0; global.dc_decks_index = 0;
...@@ -49,18 +52,21 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve ...@@ -49,18 +52,21 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve
ygopro.ctos_send(server, "UPDATE_DECK", { ygopro.ctos_send(server, "UPDATE_DECK", {
mainc: client.main.length, mainc: client.main.length,
sidec: client.side.length, sidec: client.side.length,
deckbuf: compat_deckbuf deckbuf: compat_deckbuf,
}); });
if (MirrorMode) { if (MirrorMode) {
return true; return true;
} }
var sql = "SELECT * FROM RandomDecks AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM RandomDecks)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 1;" var sql =
"SELECT * FROM RandomDecks AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM RandomDecks)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 1;";
global.mysqldb.query(sql, null, function(err, result) { global.mysqldb.query(sql, null, function (err, result) {
if (err) { if (err) {
global.mysqldb=mysql.createConnection(global.settings.modules.cloud_replay.mysql); global.mysqldb = mysql.createConnection(
global.settings.modules.cloud_replay.mysql
);
log.info(err); log.info(err);
return; return;
} }
...@@ -78,12 +84,10 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve ...@@ -78,12 +84,10 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve
if (!side) { if (!side) {
buff_main.push(code); buff_main.push(code);
valid = true; valid = true;
} } else {
else {
buff_side.push(code); buff_side.push(code);
} }
} } else if (cards[i].substring(0, 5) == "!side") {
else if (cards[i].substring(0, 5) == "!side") {
side = true; side = true;
} }
} }
...@@ -94,9 +98,16 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve ...@@ -94,9 +98,16 @@ ygopro.ctos_follow_after("UPDATE_DECK", true, async (buffer, info, client, serve
} }
}); });
return true; return true;
}); }
);
ygopro.ctos_follow_before('CHAT', true, async function(buffer, info, client, server, datas) { ygopro.ctos_follow_before("CHAT", true, async function (
buffer,
info,
client,
server,
datas
) {
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
if (!room) { if (!room) {
return; return;
...@@ -115,68 +126,121 @@ ygopro.ctos_follow_before('CHAT', true, async function(buffer, info, client, ser ...@@ -115,68 +126,121 @@ ygopro.ctos_follow_before('CHAT', true, async function(buffer, info, client, ser
msg = msg.substring(7); msg = msg.substring(7);
msg = _.trim(msg); msg = _.trim(msg);
if (msg.length < 2) { if (msg.length < 2) {
ygopro.stoc_send_chat(client, "请以【/report 举报原因】的格式写明举报原因", ygopro.constants.COLORS.YELLOW); ygopro.stoc_send_chat(
client,
"请以【/report 举报原因】的格式写明举报原因",
ygopro.constants.COLORS.YELLOW
);
return; return;
} }
//"CREATE TABLE DCReportServer(reporterIp varchar(255),reportDate DateTime)"; //"CREATE TABLE DCReportServer(reporterIp varchar(255),reportDate DateTime)";
var sql = "SELECT * FROM `DCReportServer` WHERE reporterIp=? AND reportDate > date_sub(now(), interval 5 minute)"; var sql =
"SELECT * FROM `DCReportServer` WHERE reporterIp=? AND reportDate > date_sub(now(), interval 5 minute)";
sqlParams = [client.ip]; sqlParams = [client.ip];
mysqldb.query(sql, sqlParams, function(err, result) { mysqldb.query(sql, sqlParams, function (err, result) {
if (err) { if (err) {
mysql.createConnection(settings.modules.cloud_replay.mysql); mysql.createConnection(settings.modules.cloud_replay.mysql);
log.info(err); log.info(err);
ygopro.stoc_send_chat(client, "服务器出现异常,请重试", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(
client,
"服务器出现异常,请重试",
ygopro.constants.COLORS.RED
);
return; return;
} }
if (result.length > 0) { if (result.length > 0) {
ygopro.stoc_send_chat(client, "服务器端的举报在5分钟内只能进行一次,请稍后再试", ygopro.constants.COLORS.YELLOW); ygopro.stoc_send_chat(
client,
"服务器端的举报在5分钟内只能进行一次,请稍后再试",
ygopro.constants.COLORS.YELLOW
);
return; return;
} }
sql = "INSERT INTO `DCReportServer` VALUES(?,now())"; sql = "INSERT INTO `DCReportServer` VALUES(?,now())";
sqlParams = [client.ip]; sqlParams = [client.ip];
mysqldb.query(sql, sqlParams, function(err, result) { mysqldb.query(sql, sqlParams, function (err, result) {
if (err) { if (err) {
global.mysqldb=mysql.createConnection(global.settings.modules.cloud_replay.mysql); global.mysqldb = mysql.createConnection(
global.settings.modules.cloud_replay.mysql
);
log.info(err); log.info(err);
ygopro.stoc_send_chat(client, "出现异常,请重试", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(
client,
"出现异常,请重试",
ygopro.constants.COLORS.RED
);
return; return;
} }
sql = "SELECT * FROM DCDeckNoChangeList WHERE deckMd5=?"; sql = "SELECT * FROM DCDeckNoChangeList WHERE deckMd5=?";
sqlParams = [md5]; sqlParams = [md5];
mysqldb.query(sql, sqlParams, function(err, result) { mysqldb.query(sql, sqlParams, function (err, result) {
if (err) { if (err) {
global.mysqldb=mysql.createConnection(global.settings.modules.cloud_replay.mysql); global.mysqldb = mysql.createConnection(
global.settings.modules.cloud_replay.mysql
);
log.info(err); log.info(err);
ygopro.stoc_send_chat(client, "例外库无法检索卡组,提交失败", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(
client,
"例外库无法检索卡组,提交失败",
ygopro.constants.COLORS.RED
);
return; return;
} }
if (result.length > 0) { if (result.length > 0) {
ygopro.stoc_send_chat(client, "此卡组已被判定为无需修改,提交失败", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(
client,
"此卡组已被判定为无需修改,提交失败",
ygopro.constants.COLORS.RED
);
return; return;
} }
msg = (new Date().toString()) + " - 由服务器端提交(提交者:" + client.name + "\r\n\r\n" + msg; msg =
new Date().toString() +
" - 由服务器端提交(提交者:" +
client.name +
"\r\n\r\n" +
msg;
sql = "INSERT INTO DCReport VALUES(?,?,?,'')"; sql = "INSERT INTO DCReport VALUES(?,?,?,'')";
sqlParams = [md5, client.ip, msg]; sqlParams = [md5, client.ip, msg];
mysqldb.query(sql, sqlParams, function(err, result) { mysqldb.query(sql, sqlParams, function (err, result) {
if (err) { if (err) {
global.mysqldb=mysql.createConnection(global.settings.modules.cloud_replay.mysql); global.mysqldb = mysql.createConnection(
global.settings.modules.cloud_replay.mysql
);
log.info(err); log.info(err);
ygopro.stoc_send_chat(client, "提交失败", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(
client,
"提交失败",
ygopro.constants.COLORS.RED
);
return; return;
} }
ygopro.stoc_send_chat(client, "提交成功,感谢您的举报。\n举报ID为"+md5+",可用编年史客户端查看并修改。", ygopro.constants.COLORS.YELLOW); ygopro.stoc_send_chat(
client,
"提交成功,感谢您的举报。\n举报ID为" +
md5 +
",可用编年史客户端查看并修改。",
ygopro.constants.COLORS.YELLOW
);
}); });
}); });
}); });
}); });
return true; return true;
}); });
ygopro.stoc_follow_after("DUEL_START", false, (buffer, info, client, server, datas) => { ygopro.stoc_follow_after(
"DUEL_START",
false,
(buffer, info, client, server, datas) => {
var room = ROOM_all[client.rid]; var room = ROOM_all[client.rid];
room.mm_deck = null; room.mm_deck = null;
}); }
);
ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, datas) => { ygopro.stoc_follow_after(
"CHANGE_SIDE",
true,
(buffer, info, client, server, datas) => {
var room = ROOM_all[client.rid]; var room = ROOM_all[client.rid];
if (!room) { if (!room) {
return false; return false;
...@@ -186,10 +250,11 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat ...@@ -186,10 +250,11 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat
return false; return false;
} }
var room_parameters = room.name.split('#', 2)[0].split(/[,,]/); //房间名的参数 var room_parameters = room.name.split("#", 2)[0].split(/[,,]/); //房间名的参数
var MirrorMode = false; var MirrorMode = false;
for(var parameter of room_parameters) { for (var parameter of room_parameters) {
if (parameter.toUpperCase() == "MM") { //关键字[MM] if (parameter.toUpperCase() == "MM") {
//关键字[MM]
MirrorMode = true; MirrorMode = true;
break; break;
} }
...@@ -204,14 +269,13 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat ...@@ -204,14 +269,13 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat
room.mm_deck = global.dc_decks_main[deckindex]; room.mm_deck = global.dc_decks_main[deckindex];
room.mm_side = global.dc_decks_side[deckindex]; room.mm_side = global.dc_decks_side[deckindex];
room.mm_md5 = global.dc_decks_md5[deckindex]; room.mm_md5 = global.dc_decks_md5[deckindex];
MirrorMode=false; MirrorMode = false;
} }
client.main = room.mm_deck; client.main = room.mm_deck;
client.side = room.mm_side; client.side = room.mm_side;
var compat_deckbuf = client.main.concat(client.side); var compat_deckbuf = client.main.concat(client.side);
client.deckMd5 = room.mm_md5; client.deckMd5 = room.mm_md5;
} } else {
else {
global.dc_decks_index++; global.dc_decks_index++;
if (global.dc_decks_index == global.dc_decks_index_max) { if (global.dc_decks_index == global.dc_decks_index_max) {
global.dc_decks_index = 0; global.dc_decks_index = 0;
...@@ -225,18 +289,21 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat ...@@ -225,18 +289,21 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat
ygopro.ctos_send(server, "UPDATE_DECK", { ygopro.ctos_send(server, "UPDATE_DECK", {
mainc: client.main.length, mainc: client.main.length,
sidec: client.side.length, sidec: client.side.length,
deckbuf: compat_deckbuf deckbuf: compat_deckbuf,
}); });
if (MirrorMode) { if (MirrorMode) {
return true; return true;
} }
var sql = "SELECT * FROM RandomDecks AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM RandomDecks)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 1;" var sql =
"SELECT * FROM RandomDecks AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM RandomDecks)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 1;";
global.mysqldb.query(sql, null, function(err, result) { global.mysqldb.query(sql, null, function (err, result) {
if (err) { if (err) {
global.mysqldb=mysql.createConnection(global.settings.modules.cloud_replay.mysql); global.mysqldb = mysql.createConnection(
global.settings.modules.cloud_replay.mysql
);
log.info(err); log.info(err);
return; return;
} }
...@@ -254,12 +321,10 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat ...@@ -254,12 +321,10 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat
if (!side) { if (!side) {
buff_main.push(code); buff_main.push(code);
valid = true; valid = true;
} } else {
else {
buff_side.push(code); buff_side.push(code);
} }
} } else if (cards[i].substring(0, 5) == "!side") {
else if (cards[i].substring(0, 5) == "!side") {
side = true; side = true;
} }
} }
...@@ -270,4 +335,5 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat ...@@ -270,4 +335,5 @@ ygopro.stoc_follow_after("CHANGE_SIDE", true, (buffer, info, client, server, dat
} }
}); });
return true; return true;
}); }
\ No newline at end of file );
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