规则文档理清楚,开始代码层面对比和校对

This commit is contained in:
2026-07-04 09:52:49 +08:00
parent 911cc9cc23
commit 96372d713c
18 changed files with 4624 additions and 67 deletions
+457
View File
@@ -0,0 +1,457 @@
//////////////////////////////////////////////////////////////////
/////////////////////////////咻一咻/////////////////////////////
//////////////////////////////////////////////////////////////////
var youle_erqiwang = youle_erqiwang || cls_mod.new("youle_erqiwang", "erqiwang", youle_app);
//牌类
min_loadJsFile("games/erqiwang/class.pai.js", function(){
//牌局类
min_loadJsFile("games/erqiwang/class.paiju.js", function(){
//牌桌类
min_loadJsFile("games/erqiwang/class.desk.js", function(){
//算法类
min_loadJsFile("games/erqiwang/class.arith.js", function(){
//对内的输入接口类
min_loadJsFile("games/erqiwang/class.import.js", function(){
//对内的输出接口类
min_loadJsFile("games/erqiwang/class.export.js", function(){
});
});
});
});
});
});
//对内的输入接口类(需要的外部接口)
youle_erqiwang.import = null;
//对内的输出接口类(提供给外部使用的接口)
youle_erqiwang.export = null;
//叫分或不叫
youle_erqiwang.jiaofen = function(pack){
var agentid = pack.data.agentid;
var playerid = parseInt(pack.data.playerid);
var gameid = pack.data.gameid;
var roomcode = parseInt(pack.data.roomcode);
var seat = parseInt(pack.data.seat);
var call = parseInt(pack.data.call);
//检查玩家的位置是否正确
var o_room = youle_erqiwang.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
if (!o_room){
return;
}
//牌桌
var o_desk = o_room.o_desk;
if (!o_desk){
return;
}
//牌局
var o_paiju = o_desk.method.curr_paiju();
if (!o_paiju){
return;
}
//检查当前的游戏阶段是否是叫分阶段
if (o_paiju.step != 1){
return;
}
//检查当前的叫分位置
if (o_paiju.method.get_callgrade_seat() != seat){
return;
}
//检查当前的叫分分值必须大于0,且是5的整数倍
if (call < 0 || call % 5 != 0){
return;
}
var curr_call = o_paiju.method.get_callgrade_value();
//第一家不能不叫分
if (curr_call == 0 && call == 0){
return;
}
//叫分必须小于之前的叫分
if (curr_call != 0 && call >= curr_call){
return;
}
//叫分成功
o_paiju.method.do_callgrade(call);
//返回前端
if (o_paiju.step == 1){
//等待下一家叫分
var msg = {};
msg.app = "youle";
msg.route = "erqiwang";
msg.rpc = "jiaofen";
msg.data = {};
msg.data.seat = seat;
msg.data.call = call;
msg.data.currcall = o_paiju.method.get_callgrade_value();
msg.data.multiple = cls_youle_erqiwang_arith.get_multiple_bycall(msg.data.currcall);
msg.data.nextseat = o_paiju.method.get_callgrade_seat();
msg.data.countdown = o_desk.method.get_countdown_jiaofen();
o_room.method.sendpack_toother(msg, -1);
return;
}
if (o_paiju.step == 2){
//等待庄家叫主
var msg = {};
msg.app = "youle";
msg.route = "erqiwang";
msg.rpc = "shangzhuang";
msg.data = {};
msg.data.seat = seat;
msg.data.call = call;
msg.data.banker = o_paiju.banker;
msg.data.grade = o_paiju.call;
msg.data.multiple = cls_youle_erqiwang_arith.get_multiple_bycall(msg.data.grade);
msg.data.bottomcards = o_paiju.method.get_bottomcards();
msg.data.countdown = o_desk.method.get_countdown_xuanzhu();
if (o_paiju.call < 65){
msg.data.touxiang = 0;
} else {
msg.data.touxiang = 1;
}
for (var i = 0; i < o_room.seatlist.length; i++) {
msg.conmode = o_room.seatlist[i].conmode;
msg.fromid = o_room.seatlist[i].fromid;
if (i == o_paiju.banker){
msg.data.cards = o_paiju.method.get_seat_cards(i);
} else {
delete msg.data.cards;
}
youle_erqiwang.app.SendPack(msg);
}
return;
}
}
//选主
youle_erqiwang.xuanzhu = function(pack){
var agentid = pack.data.agentid;
var playerid = parseInt(pack.data.playerid);
var gameid = pack.data.gameid;
var roomcode = parseInt(pack.data.roomcode);
var seat = parseInt(pack.data.seat);
var flower = parseInt(pack.data.flower);
//检查玩家的位置是否正确
var o_room = youle_erqiwang.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
if (!o_room){
return;
}
//牌桌
var o_desk = o_room.o_desk;
if (!o_desk){
return;
}
//牌局
var o_paiju = o_desk.method.curr_paiju();
if (!o_paiju){
return;
}
//检查当前的游戏阶段是否是选主阶段
if (o_paiju.step != 2){
return;
}
//检查庄家位置
if (o_paiju.banker != seat){
return;
}
//检查花色
if (flower != 1 && flower != 2 && flower != 3 && flower != 4){
return;
}
//选主成功
o_paiju.method.do_choiceflower(flower);
//返回前端
var msg = {};
msg.app = "youle";
msg.route = "erqiwang";
msg.rpc = "xuanzhu";
msg.data = {};
msg.data.banker = o_paiju.banker;
msg.data.flower = flower;
msg.data.countdown = o_desk.method.get_countdown_maipai();
for (var i = 0; i < o_room.seatlist.length; i++) {
msg.conmode = o_room.seatlist[i].conmode;
msg.fromid = o_room.seatlist[i].fromid;
msg.data.cards = o_paiju.method.get_seat_cards(i);
youle_erqiwang.app.SendPack(msg);
}
}
//埋牌
youle_erqiwang.maipai = function(pack){
var agentid = pack.data.agentid;
var playerid = parseInt(pack.data.playerid);
var gameid = pack.data.gameid;
var roomcode = parseInt(pack.data.roomcode);
var seat = parseInt(pack.data.seat);
var cards = pack.data.cards;
//检查玩家的位置是否正确
var o_room = youle_erqiwang.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
if (!o_room){
return;
}
//牌桌
var o_desk = o_room.o_desk;
if (!o_desk){
return;
}
//牌局
var o_paiju = o_desk.method.curr_paiju();
if (!o_paiju){
return;
}
//检查当前的游戏阶段是否是埋牌阶段
if (o_paiju.step != 3){
return;
}
//检查庄家位置
if (o_paiju.banker != seat){
return;
}
//检查埋牌是否是8张
if (cards.length != 8){
return;
}
//检查埋牌是否都在庄家手上
if (!o_paiju.method.check_cards_inhand(cards, seat)){
return;
}
//埋牌成功
o_paiju.method.do_burycard(cards);
//返回前端
var msg = {};
msg.app = "youle";
msg.route = "erqiwang";
msg.rpc = "maipai";
msg.data = {};
msg.data.seat = o_paiju.playproc.currseat;
msg.data.countdown = o_desk.method.get_countdown_chupai();
for (var i = 0; i < o_room.seatlist.length; i++) {
msg.conmode = o_room.seatlist[i].conmode;
msg.fromid = o_room.seatlist[i].fromid;
if (i == o_paiju.banker){
msg.data.cards = o_paiju.method.get_seat_cards(i);
msg.data.bottomcards = cards;
} else {
delete msg.data.cards;
delete msg.data.bottomcards;
}
youle_erqiwang.app.SendPack(msg);
}
}
//投降
youle_erqiwang.touxiang = function(pack){
var agentid = pack.data.agentid;
var playerid = parseInt(pack.data.playerid);
var gameid = pack.data.gameid;
var roomcode = parseInt(pack.data.roomcode);
var seat = parseInt(pack.data.seat);
//检查玩家的位置是否正确
var o_room = youle_erqiwang.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
if (!o_room){
return;
}
//牌桌
var o_desk = o_room.o_desk;
if (!o_desk){
return;
}
//牌局
var o_paiju = o_desk.method.curr_paiju();
if (!o_paiju){
return;
}
//检查当前的游戏阶段是否是叫分、埋牌、投降阶段
if (o_paiju.step != 2 && o_paiju.step != 3 && o_paiju.step != 4){
return;
}
//检查庄家位置
if (o_paiju.banker != seat){
return;
}
//检查是否允许投降
if (o_paiju.call < 65){
return;
}
//投降结算
o_paiju.step = 6;
var msg = {};
msg.app = "youle";
msg.route = "erqiwang";
msg.rpc = "jiesuan";
msg.data = {};
msg = o_paiju.method.get_paiju_account(1, msg);
o_room.method.sendpack_toother(msg, -1);
}
//出牌
youle_erqiwang.chupai = function(pack){
var agentid = pack.data.agentid;
var playerid = parseInt(pack.data.playerid);
var gameid = pack.data.gameid;
var roomcode = parseInt(pack.data.roomcode);
var seat = parseInt(pack.data.seat);
var cards = pack.data.cards;
//检查玩家的位置是否正确
var o_room = youle_erqiwang.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
if (!o_room){
return;
}
//牌桌
var o_desk = o_room.o_desk;
if (!o_desk){
return;
}
//牌局
var o_paiju = o_desk.method.curr_paiju();
if (!o_paiju){
return;
}
//检查当前的游戏阶段是否是出牌阶段
if (o_paiju.step != 4 && o_paiju.step != 5){
return;
}
//检查出牌位置
if (seat != o_paiju.playproc.currseat){
return;
}
//检查出牌
if (cards.length == 0){
return;
}
//检查出牌是否都在玩家手上
if (!o_paiju.method.check_cards_inhand(cards, seat)){
return;
}
//检查选中的牌是否可出,并出牌
var re = o_paiju.method.do_playcard(cards);
if (!re.result){
return;
}
//返回前端
var msg = {};
msg.app = "youle";
msg.route = "erqiwang";
msg.data = {};
msg.data.seat = seat;
msg.data.cards = cards;
msg.data.info = o_paiju.seatlist[seat];
msg.data.nextseat = o_paiju.playproc.currseat;
msg.data.countdown = o_desk.method.get_countdown_chupai();
if (o_paiju.method.have_baofu()){
msg.data.baozhu = 1;
} else {
msg.data.baozhu = 0;
}
switch (re.idx)
{
case 1: //第一个出牌
msg.rpc = "chupai1";
msg.data.count = re.count;
msg.data.flower = re.flower;
msg.data.cardtype = re.cardtype;
break;
case 2: //第二个出牌
msg.rpc = "chupai2";
break;
case 3: //第三个出牌
msg.rpc = "chupai3";
msg.data.maxseat = re.maxseat;
if (re.grade > 0){
msg.data.grade = re.grade;
// msg.data.gradecards = re.gradecards;
}
break;
}
if (o_paiju.step == 5){
for (var i = 0; i < o_room.seatlist.length; i++){
msg.conmode = o_room.seatlist[i].conmode;
msg.fromid = o_room.seatlist[i].fromid;
if (i == seat){
msg.data.cardsinhand = o_paiju.method.get_seat_cards(i);
} else {
delete msg.data.cardsinhand;
}
youle_erqiwang.app.SendPack(msg);
}
} else if (o_paiju.step == 6){
//小局结算
//出牌包的调整
msg.data.chupai = {};
msg.data.chupai.seat = msg.data.seat;
msg.data.chupai.cards = msg.data.cards;
msg.data.chupai.maxseat = msg.data.maxseat;
if (msg.data.grade){
msg.data.chupai.grade = msg.data.grade;
}
if (msg.data.gradecards){
msg.data.chupai.gradecards = msg.data.gradecards;
}
delete msg.data.seat;
delete msg.data.cards;
delete msg.data.info;
delete msg.data.nextseat;
delete msg.data.countdown;
delete msg.data.baozhu;
delete msg.data.cardsinhand;
delete msg.data.maxseat;
delete msg.data.grade;
delete msg.data.gradecards;
//获取抠底包
msg = o_paiju.method.get_bottom_account(msg);
//获取小局结算包
msg = o_paiju.method.get_paiju_account(0, msg);
o_room.method.sendpack_toother(msg, -1);
}
}
//准备
youle_erqiwang.zhunbei = function(pack){
var agentid = pack.data.agentid;
var playerid = parseInt(pack.data.playerid);
var gameid = pack.data.gameid;
var roomcode = parseInt(pack.data.roomcode);
var seat = parseInt(pack.data.seat);
//检查玩家的位置是否正确
var o_room = youle_erqiwang.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
if (!o_room){
return;
}
//牌桌
var o_desk = o_room.o_desk;
if (!o_desk){
return;
}
//牌局
var o_paiju = o_desk.method.curr_paiju();
if (!o_paiju){
return;
}
//检查当前的游戏阶段是否是结算阶段
if (o_paiju.step != 6){
return;
}
//检查当前局数小于总局数
if (o_desk.paiju_list.length >= o_room.asetcount){
return;
}
//准备成功
o_desk.method.do_prepare(seat);
}