目录结构调整
This commit is contained in:
1031
codes/games/server/games/Doudizhu/arith/arith.ddz.playcards.js
Normal file
1031
codes/games/server/games/Doudizhu/arith/arith.ddz.playcards.js
Normal file
File diff suppressed because it is too large
Load Diff
404
codes/games/server/games/Doudizhu/arith/arith.ddz.robot.js
Normal file
404
codes/games/server/games/Doudizhu/arith/arith.ddz.robot.js
Normal file
@@ -0,0 +1,404 @@
|
||||
var cls_arith_doudizhu = cls_arith_doudizhu || {};
|
||||
//若需要调用无限局 则需要填加
|
||||
//o_desk.data.zb = 0;//判断无限局是否开战 开战则为1
|
||||
// o_desk.data.zbwj = [0,0,0,0,0];//无限局中每个玩家的准备状态
|
||||
// o_desk.timer.tiren = [0,0,0,0,0];//游戏开始后,观战的机器人有概率会踢出或者让他自动准备
|
||||
// o_desk.timer.zb = 0;//随机时间执行wx_zhunbei函数,判断游戏是否能开战
|
||||
// o_desk.timer.jiqiren_zb = [0,0,0,0,0];//让机器人开局随机时间准备的定时器
|
||||
// o_desk.timer.tizhunbei = 0;//当房间满人并且有玩家未准备 则开启定时器,到了时间就T出没准备玩家
|
||||
cls_arith_doudizhu.wx_zhunbei = function(o_room,tichu,gamename){
|
||||
//tichu为1表示踢出开战的时候未准备的玩家 gamename为游戏的名字例如"guozha"
|
||||
if(!o_room.o_desk){
|
||||
return;
|
||||
}
|
||||
if(o_room.o_desk.data.zb == 1){
|
||||
return;
|
||||
}
|
||||
var tichu = tichu || 0;
|
||||
var o_desk = o_room.o_desk;
|
||||
clearTimeout(o_desk.timer.zb);
|
||||
var cishu = 0;//已准备人数
|
||||
var jiren = 0;//在房间的人数
|
||||
for(var a = 0;a<o_room.seatlist.length;a++){
|
||||
if(o_room.seatlist[a]){
|
||||
var o_player = o_room.seatlist[a];
|
||||
if(o_player.isrobot == 1){
|
||||
if(o_player.gameinfo.isprepare == 0){//如果没有准备 并且是机器人 则随机时间准备
|
||||
var sj_zb = min_random(3,8) * 500;//机器人自动准备的随机时间 可根据子游戏自己相应调整
|
||||
(function(a){o_desk.timer.jiqiren_zb[a]=setTimeout(function(){cls_arith_doudizhu.jiqiren_zb(o_desk,a,gamename);},sj_zb)})(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for(var a=0;a<o_room.seatlist.length;a++){
|
||||
if(o_room.seatlist[a]){
|
||||
var o_player = o_room.seatlist[a];
|
||||
jiren = jiren+1;
|
||||
if(o_player.gameinfo.isprepare == 1){//判断多少人准备 多少人在房间
|
||||
cishu = cishu + 1;
|
||||
o_desk.data.zbwj[a] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(o_room.o_desk){
|
||||
if(jiren == 3 && cishu<jiren){//当房间满人并且有玩家未准备 则开启定时器,到了时间就T出没准备玩家
|
||||
var zhunbeiti = function(){
|
||||
for(var a=0;a<3;a++){
|
||||
if(o_room.seatlist[a]){
|
||||
var o_player = o_room.seatlist[a];
|
||||
if(o_player.gameinfo.isprepare != 1){
|
||||
//发包
|
||||
cls_doudizhu_send.tichu(o_room,a,2);
|
||||
mod_doudizhu.app.youle_room.export.kickplayer_inroom(o_room, a);//踢出的接口
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var shijian1 = 10000;
|
||||
o_desk.timer.tizhunbei = setTimeout(zhunbeiti,shijian1);
|
||||
}
|
||||
}
|
||||
if(o_room.o_desk){
|
||||
if(cishu == 3){//是否可以开战,并且踢出开战的时候未准备的玩家。
|
||||
if(tichu == 1){
|
||||
for(var a=0;a<o_room.seatlist.length;a++){
|
||||
if(o_room.seatlist[a]){
|
||||
var o_player = o_room.seatlist[a];
|
||||
if(o_player.gameinfo.isprepare != 1){
|
||||
mod_doudizhu.app.youle_room.export.kickplayer_inroom(o_room, a);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
o_room.o_desk.data.zb = 1;
|
||||
o_room.o_desk.flow.begin();
|
||||
}else{
|
||||
var zhixing = function(){
|
||||
cls_arith_doudizhu.wx_zhunbei(o_room,0,"doudizhu");
|
||||
}
|
||||
var shijian = min_random(6,10) * 500;
|
||||
o_desk.timer.zb = setTimeout(zhixing,shijian);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cls_arith_doudizhu.jiqiren_zb = function(o_desk,seat,gamename){
|
||||
if(o_desk.data.zb == 1){
|
||||
return;
|
||||
}
|
||||
if(!o_desk.o_room){
|
||||
return;
|
||||
}
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
var o_room = o_desk.o_room;
|
||||
if(o_room.seatlist[seat] && o_room.seatlist[seat] != null){
|
||||
var o_player = o_room.seatlist[seat];
|
||||
if(o_player.isrobot == 1){
|
||||
if(o_player.gameinfo.isprepare == 0){
|
||||
o_player.gameinfo.isprepare = 1;
|
||||
o_room.o_desk.data.zbwj[seat] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(var i = 0;i<o_desk.o_room.seatlist.length;i++){
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = gamename;
|
||||
msg.rpc = "jqrzb";
|
||||
msg.data = {};
|
||||
msg.data={
|
||||
zbwj : o_room.o_desk.data.zbwj,
|
||||
mp_zt: o_room.o_desk.data.mp_zt
|
||||
}
|
||||
o_desk.o_room.method.sendpack_toseat(msg,i);
|
||||
}
|
||||
var jiren = 0;
|
||||
var cishu = 0;
|
||||
for(var a=0;a<o_room.seatlist.length;a++){
|
||||
if(o_room.seatlist[a]){
|
||||
var o_player = o_room.seatlist[a];
|
||||
jiren = jiren+1;
|
||||
if(o_player.gameinfo.isprepare == 1){
|
||||
cishu = cishu + 1;
|
||||
o_room.o_desk.data.zbwj[a] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(o_room.o_desk){
|
||||
if(cishu ==3 && cishu == jiren){
|
||||
for(var a=0;a<o_room.seatlist.length;a++){
|
||||
if(o_room.seatlist[a] && o_room.seatlist[a] != null){
|
||||
var o_player = o_room.seatlist[a];
|
||||
if(o_player.gameinfo.isprepare != 1){
|
||||
mod_doudizhu.app.youle_room.export.kickplayer_inroom(o_room, a);
|
||||
}
|
||||
}
|
||||
}
|
||||
o_room.o_desk.data.zb = 1;
|
||||
o_room.o_desk.flow.begin();
|
||||
}
|
||||
// else{
|
||||
// if(cishu == o_desk.roomtype[13]){
|
||||
// for(var a=0;a<5;a++){
|
||||
// if(o_room.seatlist[a] && o_room.seatlist[a] != null){
|
||||
// var o_player = o_room.seatlist[a];
|
||||
// if(o_player.gameinfo.isprepare != 1){
|
||||
// mod_doudizhu.app.youle_room.export.kickplayer_inroom(o_room, a);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// o_room.o_desk.data.zb = 0;
|
||||
// /////////定时发送
|
||||
// o_room.o_desk.flow.begin();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
cls_arith_doudizhu.jiqiren_cz = function(o_desk){
|
||||
for(var hh = 0;hh<o_desk.o_room.seatlist.length;hh++){//踢人或者给机器人准备
|
||||
var sj_trsj = min_random(3,15) * 500;
|
||||
(function(hh){o_desk.timer.tiren[hh]=setTimeout(function(){cls_arith_doudizhu.tiren(hh,o_desk,"doudizhu");},sj_trsj)})(hh);
|
||||
}
|
||||
}
|
||||
|
||||
cls_arith_doudizhu.tiren = function(seat,o_desk,gamename,gailv1,gailv2,gailv3){//gailv1为机器人自动准备的概率 gailv2为机器人观战自动退出的概率 gailv3为机器人自动托管的几率
|
||||
if(!o_desk.o_room){
|
||||
return;
|
||||
}
|
||||
var gailv1 = gailv1 || 10;
|
||||
var gailv2 = gailv2 || 10;
|
||||
var gailv3 = gailv3 || 10;
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
var o_room = o_desk.o_room;//踢人或者给机器人准备
|
||||
var sj_trsj = min_random(3,15) * 500;
|
||||
(function(seat){o_desk.timer.tiren[seat]=setTimeout(function(){cls_arith_doudizhu.tiren(seat,o_desk);},sj_trsj)})(seat);
|
||||
if(o_room.seatlist[seat] && o_room.seatlist[seat]!=null){
|
||||
if(o_aset.playerlist[2][seat] == 0){//不参与游戏
|
||||
var o_player = o_room.seatlist[seat];
|
||||
if(o_player.isrobot == 1){
|
||||
if(o_player.gameinfo.isprepare != 1){
|
||||
var sj_tc = min_random(1,100);
|
||||
if(sj_tc <= gailv1 && sj_tc >= 1){
|
||||
o_desk.o_room.seatlist[seat].gameinfo.isprepare = 1;
|
||||
o_desk.data.zbwj[seat] = 1;
|
||||
for(var i = 0;i<o_desk.o_room.seatlist.length;i++){
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = gamename;
|
||||
msg.rpc = "jqrzb";
|
||||
msg.data = {};
|
||||
msg.data={
|
||||
zbwj : o_room.o_desk.data.zbwj
|
||||
}
|
||||
o_desk.o_room.method.sendpack_toseat(msg,i);
|
||||
}
|
||||
}
|
||||
}
|
||||
var sj_tc1 = min_random(1,100);
|
||||
if(sj_tc1 <= gailv2 && sj_tc1 >= 1){
|
||||
mod_doudizhu.app.youle_room.export.kickplayer_inroom(o_room,seat);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(o_room.seatlist[seat] && o_room.seatlist[seat]!=null){
|
||||
if(o_aset.playerlist[2][seat] == 1){
|
||||
var o_player = o_room.seatlist[seat];
|
||||
if(o_player.isrobot == 1){
|
||||
if(o_player.gameinfo.isprepare == 1){
|
||||
var sj_tc2 = min_random(1,100);
|
||||
if(sj_tc2 <= gailv3 && sj_tc2 >= 1){//机器人有几率自动托管
|
||||
if(o_desk.data.tuoguan[seat] == 0){//具体托管值子游戏自己修改
|
||||
o_desk.data.tuoguan[seat] = 1;
|
||||
}else{
|
||||
o_desk.data.tuoguan[seat] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cls_arith_doudizhu.begin_wx = function(o_desk){//游戏开始调用此函数
|
||||
if(!o_desk){
|
||||
return;
|
||||
}
|
||||
var renshu = 0;
|
||||
o_desk.data.zb = 1;
|
||||
for(var a=0;a<o_desk.o_room.seatlist.length;a++){//人数
|
||||
if(o_desk.o_room.seatlist[a] && o_desk.o_room.seatlist[a]!=null){
|
||||
if(o_desk.o_room.infinite == 1){
|
||||
if(o_desk.data.zbwj[a] == 1){
|
||||
var o_player = o_desk.o_room.seatlist[a];
|
||||
o_player.gameinfo.isbet = 1;
|
||||
renshu=renshu+1;
|
||||
}
|
||||
}else{
|
||||
var o_player = o_desk.o_room.seatlist[a];
|
||||
o_player.gameinfo.isbet = 1;
|
||||
o_player.gameinfo.isprepare = 1;
|
||||
renshu=renshu+1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(o_desk.o_room.infinite == 1){
|
||||
o_desk.data.asetlist = [];
|
||||
clearTimeout(o_desk.timer.zb);
|
||||
for(var a =0;a<o_desk.o_room.seatlist.length;a++){
|
||||
clearTimeout(o_desk.timer.tiren[a]);
|
||||
}
|
||||
clearTimeout(o_desk.timer.tizhunbei);
|
||||
}else{
|
||||
o_desk.data.zbwj = [];
|
||||
for(var a = 0;a<o_desk.o_room.seatlist.length;a++){
|
||||
o_desk.data.zbwj.push(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cls_arith_doudizhu.xiaoju_wx = function(o_desk){//小局结算调用此函数
|
||||
if(!o_desk.o_room || !o_desk){
|
||||
return;
|
||||
}
|
||||
o_desk.data.zb = 0;
|
||||
o_desk.data.zbwj = [];
|
||||
for(var a=0;a<o_desk.o_room.seatlist.length;a++){
|
||||
o_desk.data.zbwj.push(0);
|
||||
}
|
||||
if(o_desk.o_room.infinite == 1){
|
||||
for(var a=0;a<o_desk.o_room.seatlist.length;a++){
|
||||
if(o_desk.o_room.seatlist[a] && o_desk.o_room.seatlist[a]!=null){
|
||||
var o_player = o_desk.o_room.seatlist[a];
|
||||
o_player.gameinfo.isprepare = 0;
|
||||
o_player.gameinfo.isbet = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(o_desk.o_room.infinite == 1){
|
||||
clearTimeout(o_desk.timer.zb);
|
||||
for(var a =0;a<o_desk.o_room.seatlist.length;a++){
|
||||
clearTimeout(o_desk.timer.tiren[a]);
|
||||
}
|
||||
clearTimeout(o_desk.timer.tizhunbei);
|
||||
}
|
||||
if(o_desk.data.asetlist.length < o_desk.o_room.asetcount){
|
||||
if(o_desk.o_room.infinite == 1){
|
||||
var zhixing = function(){
|
||||
cls_arith_doudizhu.wx_zhunbei(o_desk.o_room,0,"doudizhu");
|
||||
}
|
||||
o_desk.timer.zb = setTimeout(zhixing,6000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cls_arith_doudizhu.xiaoju_tr = function(o_desk,tirengailv){
|
||||
if(!o_desk.o_room || !o_desk){
|
||||
return;
|
||||
}
|
||||
var tirengailv = tirengailv || 10;
|
||||
for(var a=0;a<o_desk.o_room.seatlist.length;a++){
|
||||
if(o_desk.o_room.seatlist[a] && o_desk.o_room.seatlist[a]!=null){
|
||||
var o_player = o_desk.o_room.seatlist[a];
|
||||
if(o_player.isrobot == 1){
|
||||
var sj_tc = min_random(1,100);
|
||||
if(sj_tc <= tirengailv && sj_tc >= 1){
|
||||
o_desk.o_room.seatlist[a].gameinfo.isprepare = 0;
|
||||
o_desk.data.zbwj[a] = 0;
|
||||
mod_doudizhu.app.youle_room.export.kickplayer_inroom(o_desk.o_room, a);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cls_arith_doudizhu.wx_zf = function(o_desk,fenshu){
|
||||
if(!o_desk.o_room || !o_desk){
|
||||
return fenshu;
|
||||
}
|
||||
if(o_desk.o_room.infinite != 1){
|
||||
return fenshu;
|
||||
}
|
||||
for(var a=0;a<o_desk.o_room.seatlist.length;a++){
|
||||
if(!o_desk.o_room.seatlist[a] || o_desk.o_room.seatlist[a]==null){
|
||||
fenshu[a] = null;
|
||||
}
|
||||
}
|
||||
return fenshu;
|
||||
}
|
||||
|
||||
|
||||
// var exp = {};
|
||||
|
||||
// //准备
|
||||
// exp.player_prepare = function(o_room, seat){
|
||||
// if(!o_room || !o_room.o_desk){
|
||||
// return;
|
||||
// }
|
||||
// if(o_room.o_desk.data.zb == 1){
|
||||
// return;
|
||||
// }
|
||||
// //玩家准备
|
||||
// var cishu = 0;
|
||||
// var jiren = 0;
|
||||
// var renshu = 0;
|
||||
// for(var a=0;a<o_room.seatlist.length;a++){
|
||||
// if(o_room.seatlist[a] && o_room.seatlist[a] != null){
|
||||
// renshu++;
|
||||
// var o_player = o_room.seatlist[a];
|
||||
// jiren = jiren+1;
|
||||
// if(o_player.gameinfo.isprepare == 1){
|
||||
// cishu = cishu + 1;
|
||||
// o_room.o_desk.data.zbwj[a] = 1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if(o_room.o_desk){
|
||||
// // if(o_room.o_desk.roomtype[13] <= 1){
|
||||
// wx_zhunbei(o_room,o_room.o_desk,gamename);
|
||||
// // }
|
||||
// // else{
|
||||
// // if(cishu == renshu && cishu == o_room.o_desk.roomtype[13]){
|
||||
// // o_room.o_desk.data.zb = 1;
|
||||
// // for(var a=0;a<=10;a++){
|
||||
// // clearTimeout(o_room.o_desk.timer.dsq[a]);
|
||||
// // clearTimeout(o_room.o_desk.timer.dsq1[a]);
|
||||
// // clearTimeout(o_room.o_desk.timer.dsq2[a]);
|
||||
// // }
|
||||
// // clearTimeout(o_room.o_desk.timer.zb);
|
||||
// // clearTimeout(o_room.o_desk.timer.tizhunbei);
|
||||
// // o_room.o_desk.flow.begin();
|
||||
// // }
|
||||
// // }
|
||||
// }
|
||||
// }
|
||||
|
||||
// //是否可以准备
|
||||
// exp.player_CanPrepare = function(o_room, seat){
|
||||
// if(o_room.o_desk){
|
||||
// //子游戏进行判断是否满足准备条件
|
||||
// if(o_room.seatlist[seat].gameinfo.isprepare){
|
||||
// return 0;
|
||||
// }else{
|
||||
// return 1;
|
||||
// }
|
||||
// }
|
||||
// return 1;
|
||||
// }
|
||||
|
||||
// //玩家在无限局是否可离开,只有准备阶段可离开,可离开返回值1,否者0
|
||||
// exp.isPlayerCanLeave = function(o_room, seat){
|
||||
// //玩家是否可离开
|
||||
// if(o_room.seatlist[seat].gameinfo.isbet == 0){
|
||||
// return 1; //可离开
|
||||
// }else {
|
||||
// return 0;
|
||||
// }
|
||||
// }
|
||||
|
||||
// //最大开战人数(几人房间)
|
||||
// exp.makewar_playercount = function(roomtype,gameConfig){
|
||||
// //return 5;
|
||||
// }
|
||||
69
codes/games/server/games/Doudizhu/arith/arith.ddz.score.js
Normal file
69
codes/games/server/games/Doudizhu/arith/arith.ddz.score.js
Normal file
@@ -0,0 +1,69 @@
|
||||
var cls_arith_doudizhu = cls_arith_doudizhu || {};
|
||||
//炸翻倍
|
||||
cls_arith_doudizhu.price = function(type,seat){
|
||||
var bei = 1;
|
||||
if((type[2]==9||type[2]==12)){
|
||||
bei =2;
|
||||
}
|
||||
return bei;
|
||||
}
|
||||
//分
|
||||
cls_arith_doudizhu.score = function(o_desk){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
//基础分
|
||||
var bei = 1;
|
||||
if(o_desk.data.roomtype[3]==2){
|
||||
bei = o_desk.data.roomtype[4][0];
|
||||
}
|
||||
var jichu = o_aset.bei*o_aset.down_score[1]*bei;
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
//是不是地主
|
||||
if(o_aset.winner == 0){
|
||||
if(i==o_aset.banker){
|
||||
o_aset.bj_score[i]=jichu*(o_aset.maxman-1);
|
||||
}else{
|
||||
o_aset.bj_score[i]=0-jichu;
|
||||
}
|
||||
}else{
|
||||
if(i==o_aset.banker){
|
||||
o_aset.bj_score[i]=0-jichu*(o_aset.maxman-1);
|
||||
}else{
|
||||
o_aset.bj_score[i]=jichu;
|
||||
}
|
||||
}
|
||||
}
|
||||
// o_aset.bj_score[0]=-1100;
|
||||
// o_aset.bj_score[1]=1100;
|
||||
//是不是金币场
|
||||
if(o_desk.data.roomtype[3]==2){
|
||||
var fen =cls_method_doudizhu.enough(o_desk);
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(o_aset.playerlist[2][i]!=1){
|
||||
fen[i]=null;
|
||||
}
|
||||
}
|
||||
mod_doudizhu.app.youle_room.export.save_grade_aset(o_desk.o_room,fen,o_aset.num[0]);
|
||||
}else{
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(o_aset.playerlist[2][i]!=1){
|
||||
o_aset.bj_score[i]=null;
|
||||
}
|
||||
}
|
||||
//小局抽成
|
||||
mod_doudizhu.app.youle_room.export.save_grade_aset(o_desk.o_room,o_aset.bj_score,o_aset.num[0]);
|
||||
}
|
||||
//分数
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
o_desk.data.grade[i]+=o_aset.bj_score[i];
|
||||
if(o_desk.o_room.infinite ==1){
|
||||
o_desk.data.gold[i] = o_desk.o_room.seatlist[i].bean+ o_desk.data.gold_score[i];
|
||||
}
|
||||
o_desk.data.xj_score[i][o_desk.data.asetlist.length-1]=o_aset.bj_score[i];//每局得分
|
||||
//是不是金币场
|
||||
if(o_desk.data.roomtype[3]==2){
|
||||
o_desk.o_room.seatlist[i].gameinfo.grade=o_desk.data.gold_score[i];
|
||||
}else{
|
||||
o_desk.o_room.seatlist[i].gameinfo.grade=o_desk.data.grade[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
116
codes/games/server/games/Doudizhu/class.aset2.ddz.js
Normal file
116
codes/games/server/games/Doudizhu/class.aset2.ddz.js
Normal file
@@ -0,0 +1,116 @@
|
||||
////////////////////////////////////////////////////////
|
||||
///////////小局类/////////////////
|
||||
var cls_aset2_doudizhu=cls_aset2.NewClass();
|
||||
|
||||
//服务器和前端用到数据
|
||||
cls_aset2_doudizhu.declare = function(){
|
||||
var o_aset = {};
|
||||
o_aset.playerlist = [[-1,-1,-1],[-1,-1,-1],[-1,-1,-1],[-1,-1,-1],[-1,-1,-1]]; //玩家信息状态 下标0:操作状态、1:准备状态、2:是否参与游戏、3:抢庄状态、4:加倍状态
|
||||
o_aset.cardlist = []; //牌列表
|
||||
o_aset.stage = -1; //牌桌当前阶段 0 发牌叫分 1 加倍 2出牌 3小局 4大局
|
||||
|
||||
o_aset.banker = -1; //庄
|
||||
o_aset.control = -1; //控制权
|
||||
o_aset.play = 0;
|
||||
o_aset.index = 0;
|
||||
o_aset.down_score = [0,1]; //底分
|
||||
o_aset.bei = 1; //倍数
|
||||
o_aset.hand_cards = [[],[],[]]; //手牌
|
||||
o_aset.team_cards = [[],[],[]]; //每个人的队友牌(某些游戏打完了能看队友的牌)或者明牌
|
||||
o_aset.point_cards =[[],[],[]]; //提示
|
||||
o_aset.undercards = []; //底牌
|
||||
o_aset.caozuo = 0; //接包次数
|
||||
o_aset.rest= [0,0,0]; //每个人的牌剩余
|
||||
o_aset.rest_cards=[[],[],[]]; //游戏结束时每个人的牌ID
|
||||
o_aset.dealid = [[],[],[]]; //每个人的出牌ID
|
||||
o_aset.bj_score = [0,0,0]; //本局每个人的输赢分
|
||||
o_aset.cardtype =[[],[]]; //当前出牌的牌型 下标0:牌型的类型 1:牌列表
|
||||
o_aset.maxplayer =-1; //当前最大出牌人的座位号
|
||||
o_aset.maxman = 0; //当前游戏人数
|
||||
o_aset.num = [0,0]; //0 当前局 1 总局数
|
||||
o_aset.end = -1; //是否小局
|
||||
o_aset.updown_swim = [-1,-1,-1,0];
|
||||
///////////////////////////////////////////
|
||||
o_aset.winner = -1;
|
||||
o_aset.sj_cards = [];
|
||||
o_aset.shangjia = [];
|
||||
o_aset.di_bei = 1;
|
||||
o_aset.cishu = -1;
|
||||
o_aset.chuntian = -1;
|
||||
o_aset.play_ci = [0,0,0];
|
||||
return o_aset;
|
||||
}
|
||||
//服务器用的数据
|
||||
cls_aset2_doudizhu.server = function(){
|
||||
var server = {};
|
||||
server.hand_cards = [];
|
||||
server.pjhf = [];
|
||||
return server ;
|
||||
}
|
||||
//几副牌
|
||||
cls_aset2_doudizhu.get_cardcount = function(o_desk){
|
||||
return 1;
|
||||
}
|
||||
//每人需要发多少张牌
|
||||
cls_aset2_doudizhu.get_dealcount = function(o_aset, o_desk){
|
||||
return o_desk.data.gameConfig.card_len[o_desk.data.roomtype[2]-1][o_desk.data.roomtype[8]-1];
|
||||
}
|
||||
//留底牌
|
||||
cls_aset2_doudizhu.get_bottomcount = function(o_aset, o_desk){
|
||||
return o_desk.data.gameConfig.dipai[o_desk.data.roomtype[2]];
|
||||
}
|
||||
//除掉不要的牌
|
||||
// cls_aset2_doudizhu.deletecard=function(o_aset){
|
||||
// for (var i = 0; i < o_aset.cardlist.length; i++){
|
||||
// var o_card = o_aset.cardlist[i];
|
||||
// this.get_cardclass().SetDeal(o_card, -1);
|
||||
// }
|
||||
// //
|
||||
// }
|
||||
// cls_aset2_doudizhu.DealCard= function(o_aset, o_desk){
|
||||
// //需要发牌的位置列表
|
||||
// var seatlist = this.get_dealseatlist(o_aset, o_desk);
|
||||
// //每人需要发多少张牌
|
||||
// var dealcount = this.get_dealcount(o_aset, o_desk);
|
||||
// //需要留几张底牌
|
||||
// var bottomcount = this.get_bottomcount(o_aset, o_desk);
|
||||
// //注意:dealcount * seatlist + bottomcount必须等于除掉不要的牌之后的牌的总数
|
||||
|
||||
// //发牌数组
|
||||
// var tmplist = [];
|
||||
// for (var i = 0; i < seatlist.length; i++){
|
||||
// for (var j = 0; j < dealcount; j++){
|
||||
// tmplist.push(seatlist[i]);
|
||||
// }
|
||||
// }
|
||||
// for (var i = 0; i < bottomcount; i++){
|
||||
// tmplist.push(-1);
|
||||
// }
|
||||
// //随机发牌
|
||||
// for (var i = 0; i < o_aset.cardlist.length; i++){
|
||||
// var o_card = o_aset.cardlist[i];
|
||||
// var card_deal = this.get_cardclass().GetDeal(o_card);
|
||||
// if (card_deal != -2&&i!=o_aset.turn_id){
|
||||
// var idx = min_random(0, tmplist.length - 1);
|
||||
// this.get_cardclass().SetDeal(o_card, tmplist[idx]);
|
||||
// this.get_cardclass().SetStart(o_card, tmplist[idx]);
|
||||
// this.get_cardclass().SetPlay(o_card, -1);
|
||||
// this.get_cardclass().SetOver(o_card, tmplist[idx]);
|
||||
// //将发牌数组的最后一位移至该位置
|
||||
// if (idx < tmplist.length - 1) {
|
||||
// tmplist[idx] = tmplist[tmplist.length - 1];
|
||||
// };
|
||||
// //发牌数组长度减一
|
||||
// tmplist.length = tmplist.length - 1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
2
codes/games/server/games/Doudizhu/class.card2.ddz.js
Normal file
2
codes/games/server/games/Doudizhu/class.card2.ddz.js
Normal file
@@ -0,0 +1,2 @@
|
||||
///////////牌类/////////////////
|
||||
var cls_card2_doudizhu=cls_card2.NewClass();
|
||||
311
codes/games/server/games/Doudizhu/class.export.js
Normal file
311
codes/games/server/games/Doudizhu/class.export.js
Normal file
@@ -0,0 +1,311 @@
|
||||
///////////////////////////////////////////////////
|
||||
/////// cls_mod_doudizhu_export: 输出接口 ///////
|
||||
///////////////////////////////////////////////////
|
||||
var cls_mod_doudizhu_export = cls_mod_doudizhu_export || {
|
||||
new: function() {
|
||||
|
||||
var exp = {};
|
||||
//创建房间时需要的房卡数量
|
||||
exp.get_needroomcard = function(roomtype,gameConfig){
|
||||
/////房主扣卡1 ///每人扣卡2
|
||||
switch(roomtype[1]){
|
||||
case 1 :
|
||||
switch(roomtype[0]){//4局 8局
|
||||
case 1:
|
||||
return gameConfig.kouka[1][0];
|
||||
break;
|
||||
case 2:
|
||||
return gameConfig.kouka[1][1];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2 :
|
||||
switch(roomtype[0]){//4局 8局
|
||||
case 1:
|
||||
return gameConfig.kouka[0][0];
|
||||
break;
|
||||
case 2:
|
||||
return gameConfig.kouka[0][1];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
//创建房间成功时返回给游戏前端的房间总局数
|
||||
exp.get_asetcount = function(roomtype,gameConfig){
|
||||
switch (roomtype[0]){
|
||||
case 1:
|
||||
return gameConfig.jushu[0];
|
||||
break;
|
||||
case 2:
|
||||
return gameConfig.jushu[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
//加入房间时根据roomtype获取需要的房卡数量
|
||||
exp.get_needroomcard_joinroom = function(roomtype,gameConfig){
|
||||
/////房主扣卡1 ///每人扣卡2
|
||||
switch(roomtype[1]){
|
||||
case 1 :
|
||||
return 0;
|
||||
break;
|
||||
case 2 :
|
||||
switch(roomtype[0]){//4局 8局
|
||||
case 1:
|
||||
return gameConfig.kouka[0][0];
|
||||
break;
|
||||
case 2:
|
||||
return gameConfig.kouka[0][1];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 3 :
|
||||
switch(roomtype[0]){//4局 8局
|
||||
case 1:
|
||||
return gameConfig.kouka[1][0];
|
||||
break;
|
||||
case 2:
|
||||
return gameConfig.kouka[1][1];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//群主开房 根据房间类型判断 0 房主扣卡 1 每人扣卡 2 大赢家扣卡
|
||||
exp.deduct_roomcard_mode = function(roomtype, gameConfig){
|
||||
switch(roomtype[1]){
|
||||
case 1:
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
return 1;
|
||||
break;
|
||||
case 3:
|
||||
return 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
exp.makewar_playercount = function(roomtype,gameConfig){
|
||||
switch(roomtype[2]){
|
||||
case 1:
|
||||
return 3;
|
||||
break;
|
||||
case 2:
|
||||
return 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
///是否为星星场,返回1为星星场。
|
||||
exp.createroom_roommode = function(roomtype){
|
||||
switch(roomtype[3]){
|
||||
case 1:
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//星星场房间的进入时最低星星数限制,无限制return null
|
||||
exp.createroom_beanfloor=function(roomtype){
|
||||
switch(roomtype[3]){
|
||||
case 1:
|
||||
return null;
|
||||
break;
|
||||
case 2:
|
||||
return roomtype[4][1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
////星星场房间的星星倍数值
|
||||
exp.createroom_beanmult = function(roomtype){
|
||||
return roomtype[4][0];
|
||||
}
|
||||
//水费
|
||||
exp.owner_beanpush = function(roomtype){
|
||||
switch(roomtype[3]){
|
||||
case 1:
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
return roomtype[4][2];
|
||||
break;
|
||||
}
|
||||
}
|
||||
//准备
|
||||
exp.player_prepare = function(o_room, seat){
|
||||
if(!o_room || !o_room.o_desk){
|
||||
return;
|
||||
}
|
||||
if(o_room.o_desk.data.zb == 1){
|
||||
return;
|
||||
}
|
||||
//玩家准备
|
||||
var cishu = 0;
|
||||
var jiren = 0;
|
||||
var renshu = 0;
|
||||
for(var a=0;a<o_room.seatlist.length;a++){
|
||||
if(o_room.seatlist[a] && o_room.seatlist[a] != null){
|
||||
renshu++;
|
||||
var o_player = o_room.seatlist[a];
|
||||
jiren = jiren+1;
|
||||
if(o_player.gameinfo.isprepare == 1){
|
||||
cishu = cishu + 1;
|
||||
o_room.o_desk.data.zbwj[a] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(o_room.o_desk){
|
||||
cls_arith_doudizhu.wx_zhunbei(o_room,0,"doudizhu");
|
||||
}
|
||||
}
|
||||
//是否可以准备
|
||||
exp.player_CanPrepare = function(o_room, seat){
|
||||
if(o_room.o_desk){
|
||||
//子游戏进行判断是否满足准备条件
|
||||
if(o_room.seatlist[seat].gameinfo.isprepare){
|
||||
return 0;
|
||||
}else{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
//玩家在无限局是否可离开,只有准备阶段可离开,可离开返回值1,否者0
|
||||
exp.isPlayerCanLeave = function(o_room, seat){
|
||||
//玩家是否可离开
|
||||
if(o_room.seatlist[seat].gameinfo.isbet == 0){
|
||||
return 1; //可离开
|
||||
}else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
//玩家离开房间
|
||||
exp.player_leave = function(o_room, seat){
|
||||
if(!o_room){
|
||||
return;
|
||||
}
|
||||
var o_desk = o_room.o_desk;
|
||||
o_desk.data.zbwj[seat] = 0;
|
||||
o_desk.data.tuoguan[seat] = -1;
|
||||
o_desk.data.mp_zt[seat] = -1;
|
||||
if(o_desk.data.asetlist.length>0){
|
||||
o_desk.data.asetlist[o_desk.data.asetlist.length-1].playerlist[1][seat]=1;
|
||||
}
|
||||
}
|
||||
//恢复牌局
|
||||
exp.restore_room= function(o_room, o_deskinfo){
|
||||
//new 一个实例
|
||||
cls_desk_doudizhu.new(o_room);
|
||||
///之前保存的数据
|
||||
o_room.o_desk.data=o_deskinfo;
|
||||
//新建
|
||||
o_room.o_desk.flow.begin();
|
||||
}
|
||||
//开战
|
||||
exp.makewar = function(o_room,gameConfig){
|
||||
//new 一个实例
|
||||
cls_desk_doudizhu.new(o_room);
|
||||
o_room.o_desk.data.gameConfig = gameConfig;
|
||||
o_room.o_desk.data.paixing = gameConfig.paixing;
|
||||
//
|
||||
cls_method_doudizhu.change_Config(o_room.o_desk);
|
||||
if (o_room.infinite == 1) {
|
||||
var renshu = 0;
|
||||
for(var a=0;a<o_room.seatlist.length;a++){//人数
|
||||
if(o_room.seatlist[a]){
|
||||
renshu=renshu+1;
|
||||
}
|
||||
}
|
||||
o_room.o_desk.method.NewAset();//新建一小局
|
||||
var o_aset = o_room.o_desk.method.CurrAset();
|
||||
setTimeout(function(){cls_arith_doudizhu.wx_zhunbei(o_room,0,"doudizhu");}, 200);
|
||||
return 3;
|
||||
}else{
|
||||
//新建
|
||||
var bao = function(){
|
||||
o_room.o_desk.flow.begin();
|
||||
}
|
||||
o_room.o_desk.timer.ds[0]=setTimeout(bao,50);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
//获取某个玩家的牌桌整桌当前信息
|
||||
exp.get_deskinfo = function(o_room, seat){
|
||||
//修改玩家的游戏状态
|
||||
if(o_room.o_desk.data.asetlist.length>0){
|
||||
var o_aset = o_room.o_desk.method.CurrAset();
|
||||
var r = {};
|
||||
r = min_copyjson(o_aset);
|
||||
r.cardlist = [];
|
||||
r.hand_cards = o_aset.hand_cards[seat];
|
||||
r.point_cards = o_aset.point_cards[seat];
|
||||
r.tuoguan = o_room.o_desk.data.tuoguan;
|
||||
r.grade = o_room.o_desk.data.grade;
|
||||
r.xj_score = o_room.o_desk.data.xj_score;
|
||||
r.gold_score = o_room.o_desk.data.gold_score;
|
||||
r.gold = o_room.o_desk.data.gold;
|
||||
r.roomtype = o_room.o_desk.data.roomtype;
|
||||
r.mp_zt = o_room.o_desk.data.mp_zt;
|
||||
if(o_aset.end ==1){
|
||||
r.rest_cards = o_aset.hand_cards;
|
||||
}
|
||||
return r ;
|
||||
}
|
||||
else{
|
||||
var r = {};
|
||||
return r ;
|
||||
}
|
||||
}
|
||||
//解散房间
|
||||
exp.get_disbandRoom = function(o_room){
|
||||
if(o_room.o_desk.data.asetlist.length>0){
|
||||
var o_aset = o_room.o_desk.method.CurrAset();
|
||||
o_aset.stage = 4;
|
||||
for(var i=0;i<o_room.o_desk.timer.ds.length;i++){
|
||||
clearTimeout(o_room.o_desk.timer.ds[i]);
|
||||
}
|
||||
for(var i=0;i<o_room.o_desk.timer.own.length;i++){
|
||||
clearTimeout(o_room.o_desk.timer.own[i]);
|
||||
}
|
||||
for(var i=0;i<o_room.o_desk.timer.zidong.length;i++){
|
||||
clearTimeout(o_room.o_desk.timer.zidong[i]);
|
||||
}
|
||||
var shijian = cls_method_doudizhu.get_time();
|
||||
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "end";
|
||||
msg.data = {};
|
||||
msg.data.grade =o_room.o_desk.data.grade;
|
||||
msg.data.xj_score=o_room.o_desk.data.xj_score;
|
||||
msg.data.stage=o_aset.stage;
|
||||
msg.data.shijian=shijian;
|
||||
//发送数据包给前端后一定要调用牌桌的.method.save_sendpack方法
|
||||
for(var i=0;i<o_room.seatlist.length;i++){
|
||||
if(o_room.seatlist[i]){
|
||||
o_room.o_desk.debug.save_sendpack(msg, i, o_room.seatlist[i].playerid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//保存战绩
|
||||
o_room.o_desk.flow.end(0);
|
||||
return msg ;
|
||||
}
|
||||
}
|
||||
return exp;
|
||||
}
|
||||
}
|
||||
|
||||
//对内输出接口
|
||||
mod_doudizhu.export = cls_mod_doudizhu_export.new();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
35
codes/games/server/games/Doudizhu/class.import.js
Normal file
35
codes/games/server/games/Doudizhu/class.import.js
Normal file
@@ -0,0 +1,35 @@
|
||||
///////////////////////////////////////////////////
|
||||
/////// cls_mod_doudizhu_import: 输入接口 ///////
|
||||
///////////////////////////////////////////////////
|
||||
var cls_mod_doudizhu_import = cls_mod_doudizhu_import || {
|
||||
|
||||
new: function() {
|
||||
|
||||
var imp = {};
|
||||
|
||||
//检查玩家数据包的合法性
|
||||
imp.check_player = function(agentid, gameid, roomcode, seat, playerid, conmode, fromid){
|
||||
return mod_doudizhu.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, conmode, fromid);
|
||||
}
|
||||
|
||||
//扣除房卡
|
||||
imp.deduct_roomcard = function(o_room){
|
||||
return mod_doudizhu.app.youle_room.export.deduct_roomcard(o_room);
|
||||
}
|
||||
|
||||
//保存战绩
|
||||
imp.save_grade = function(o_room, o_gameinfo1, o_gameinfo2, freeroomflag){
|
||||
mod_doudizhu.app.youle_room.export.save_grade(o_room, o_gameinfo1, o_gameinfo2, freeroomflag);
|
||||
}
|
||||
|
||||
//完成游戏里的任务
|
||||
imp.finish_gametask = function(agentid, o_player, taskid){
|
||||
mod_doudizhu.app.youle_room.export.finish_gametask(agentid, o_player, taskid);
|
||||
}
|
||||
|
||||
return imp;
|
||||
}
|
||||
}
|
||||
|
||||
// 输入接口
|
||||
mod_doudizhu.import = cls_mod_doudizhu_import.new();
|
||||
127
codes/games/server/games/Doudizhu/desk.ddz.js
Normal file
127
codes/games/server/games/Doudizhu/desk.ddz.js
Normal file
@@ -0,0 +1,127 @@
|
||||
///////////////////////////////////////////////////
|
||||
/////// cls_mod_doudizhu_export: 输出接口 ///////
|
||||
///////////////////////////////////////////////////
|
||||
var cls_desk2_doudizhu = cls_desk2;
|
||||
var cls_desk_doudizhu = cls_desk_doudizhu || {
|
||||
new: function(o_room) {
|
||||
var o_desk = cls_desk2_doudizhu.new(o_room);
|
||||
o_desk.flow={};
|
||||
o_desk.arith={};
|
||||
o_desk.data.grade = [0,0,0]; //总输赢分
|
||||
o_desk.data.xj_score = [[],[],[]];//每个人每局的输赢分
|
||||
o_desk.data.gold_score= [0,0,0];//金币总输赢分
|
||||
//-------------------------------------------
|
||||
o_desk.data.pjhf = []; //(暂定)
|
||||
o_desk.data.hand_cards = []; //记录每个人每局的手牌
|
||||
o_desk.data.undercards = []; //记录每局的底牌
|
||||
o_desk.data.di_bei = []; //记录每局的底牌的倍数
|
||||
o_desk.data.banker=[]; //记录每局的庄
|
||||
o_desk.data.down_score = [];
|
||||
o_desk.data.mingpai_zt = [];
|
||||
o_desk.data.bei = [];
|
||||
|
||||
//-----------------------------------------
|
||||
o_desk.data.ziyuan=[]; //用于保存玩家信息 昵称 头像什么的
|
||||
o_desk.data.id = []; //用于保存玩家ID
|
||||
o_desk.data.roomtype=o_room.roomtype; //房间类型
|
||||
o_desk.data.tuoguan = [-1,-1,-1]; //每个人的托管状态
|
||||
o_desk.data.gameConfig = {}; //配置文件
|
||||
o_desk.data.winner = -1;
|
||||
o_desk.data.enough =-1;
|
||||
o_desk.data.mp_zt = [-1,-1,-1]; //
|
||||
//服务器用到的数据
|
||||
o_desk.data.server = [];
|
||||
o_desk.data.bugou = [-1,-1,-1];
|
||||
o_desk.data.gold = [0,0,0];
|
||||
// 单牌0 对子1 顺子2 三同3 三带一4 三带一对5 三带二6 四带二7 四带两对8 连对9 飞机10 炸弹11 王炸12 几个王13的炸弹(为等级排序,若为0,表示此牌型不可出)
|
||||
o_desk.data.paixing=[];
|
||||
// o_desk.data.paixing = [[1,[1,1]],[1,[2,1]],[1,[1,5]],[1,[3,1]],[1,[3,1]],[1,[3,1]],[0,[3,1]],[1,[4,1]],[1,[4,1]],[1,[2,3]],[1,[3,2]],[2,[4,1]],[3,[1,2]],[0,[5,1]]];
|
||||
//定时器
|
||||
o_desk.timer.ds=[-1,-1,-1,-1,-1,-1,-1];//牌桌的定时器
|
||||
o_desk.timer.dingshi=[-1,-1,-1,-1,-1,-1,-1];//牌桌的定时器
|
||||
o_desk.timer.own = [-1,-1,-1,-1,-1]; //每个人需要用到的定时器
|
||||
o_desk.timer.zidong = [-1,-1,-1];
|
||||
//无限局用到
|
||||
o_desk.data.zb = 0;//判断无限局是否开战 开战则为1
|
||||
o_desk.data.zbwj = [0,0,0];//无限局中每个玩家的准备状态
|
||||
o_desk.timer.tiren = [0,0,0];//游戏开始后,观战的机器人有概率会踢出或者让他自动准备
|
||||
o_desk.timer.zb = 0;//随机时间执行wx_zhunbei函数,判断游戏是否能开战
|
||||
o_desk.timer.jiqiren_zb = [0,0,0];//让机器人开局随机时间准备的定时器
|
||||
o_desk.timer.tizhunbei = 0;//当房间满人并且有玩家未准备 则开启定时器,到了时间就T出没准备玩家
|
||||
|
||||
//改变原有的方法
|
||||
o_desk.method.AsetClass=function(){
|
||||
return cls_aset2_doudizhu ;
|
||||
}
|
||||
//------------------------------------------------------------//
|
||||
//新建一局
|
||||
o_desk.flow.begin=function(){
|
||||
return cls_process_doudizhu.begin(o_desk);
|
||||
}
|
||||
//控制台
|
||||
o_desk.flow.control=function(type){
|
||||
return cls_process_doudizhu.control(o_desk,type);
|
||||
}
|
||||
//发牌
|
||||
o_desk.flow.dealcard=function(){
|
||||
return cls_process_doudizhu.dealcard(o_desk);
|
||||
}
|
||||
//包庄
|
||||
o_desk.flow.baozhuang=function(seat,score){
|
||||
return cls_process_doudizhu.baozhuang(o_desk,seat,score);
|
||||
}
|
||||
//抢庄
|
||||
o_desk.flow.lootbanket=function(seat,score){
|
||||
return cls_process_doudizhu.lootbanket(o_desk,seat,score);
|
||||
}
|
||||
//加倍
|
||||
o_desk.flow.more=function(seat,count){
|
||||
return cls_process_doudizhu.more(o_desk,seat,count);
|
||||
}
|
||||
//出牌
|
||||
o_desk.flow.playcards=function(seat,cards){
|
||||
return cls_process_doudizhu.playcards(o_desk,seat,cards);
|
||||
}
|
||||
//不出
|
||||
o_desk.flow.display=function(seat){
|
||||
return cls_process_doudizhu.display(o_desk,seat);
|
||||
}
|
||||
//小局
|
||||
o_desk.flow.aset=function(){
|
||||
return cls_process_doudizhu.aset(o_desk);
|
||||
}
|
||||
//准备
|
||||
o_desk.flow.ready=function(seat,mingpai){
|
||||
return cls_process_doudizhu.ready(o_desk,seat,mingpai);
|
||||
}
|
||||
//明牌
|
||||
o_desk.flow.mingpai=function(seat){
|
||||
return cls_process_doudizhu.mingpai(o_desk,seat);
|
||||
}
|
||||
//托管
|
||||
o_desk.flow.help_play=function(seat){
|
||||
return cls_process_doudizhu.help_play(o_desk,seat);
|
||||
}
|
||||
//结束保存战绩
|
||||
o_desk.flow.end=function(type){
|
||||
return cls_process_doudizhu.end(o_desk,type);
|
||||
}
|
||||
//要牌
|
||||
o_desk.flow.givecard=function(seat,count){
|
||||
return cls_process_doudizhu.givecard(o_desk,seat,count);
|
||||
}
|
||||
//获取服务器当局数据
|
||||
o_desk.flow.get_server=function(){
|
||||
return cls_process_doudizhu.get_server(o_desk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
196
codes/games/server/games/Doudizhu/method/method.ddz.enough.js
Normal file
196
codes/games/server/games/Doudizhu/method/method.ddz.enough.js
Normal file
@@ -0,0 +1,196 @@
|
||||
var cls_method_doudizhu = cls_method_doudizhu || {};
|
||||
//金币够不够
|
||||
cls_method_doudizhu.enough = function(o_desk){
|
||||
//获取当前小局对象
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
var bugou = [];
|
||||
var zheng = [];
|
||||
var zhengfen = [];
|
||||
var fufen = [];
|
||||
var gold = min_copyjson(o_aset.bj_score);
|
||||
for(var a=0;a<o_aset.maxman;a++){
|
||||
//金币不够限进
|
||||
if(o_desk.o_room.seatlist[a].bean+o_desk.data.gold_score[a]+gold[a]<o_desk.data.roomtype[4][1]){
|
||||
o_desk.data.bugou[a]=a;
|
||||
o_desk.data.enough=1;
|
||||
}
|
||||
if(o_desk.o_room.seatlist[a].bean+o_desk.data.gold_score[a]+gold[a]<=0){
|
||||
bugou.push(a);
|
||||
/////当前玩家的输分 最多输到0
|
||||
gold[a]=0-(o_desk.o_room.seatlist[a].bean+o_desk.data.gold_score[a]);
|
||||
o_desk.data.bugou[a]=a;
|
||||
o_desk.data.enough=1;
|
||||
}
|
||||
|
||||
/////如果星星数小于0
|
||||
if(gold[a]<0){
|
||||
fufen.push(gold[a]);
|
||||
}
|
||||
if(gold[a]>0){
|
||||
zheng.push(a);
|
||||
}
|
||||
}
|
||||
var wanjia = false ;
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(bugou[i]==o_aset.banker){
|
||||
wanjia = true ;
|
||||
}
|
||||
}
|
||||
//地主不够输
|
||||
if(wanjia){
|
||||
var pingfen = parseInt(Math.abs(gold[o_aset.banker])/(o_aset.maxman-1));
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(i!=o_aset.banker){
|
||||
gold[i] = pingfen;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
/////如果有负星星的人
|
||||
if(bugou.length>0){
|
||||
/////得分的有几个人
|
||||
if(zheng.length>0){
|
||||
for(var a=0;a<zheng.length;a++){
|
||||
zhengfen.push(gold[zheng[a]]);
|
||||
}
|
||||
/////得分的人大于1人
|
||||
if(zheng.length>1){
|
||||
////给得分的人排序
|
||||
for(var i=0;i<zheng.length;i++){
|
||||
for(var j=i+1;j<zheng.length;j++){
|
||||
if(zhengfen[i]<zhengfen[j]){
|
||||
var jh = zheng[i];
|
||||
var jhyi = zhengfen[i];
|
||||
zheng[i]=zheng[j];
|
||||
zhengfen[i]=zhengfen[j];
|
||||
zheng[j]=jh;
|
||||
zhengfen[j]=jhyi;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
///////不输分加起来多少
|
||||
var fuzong = 0;
|
||||
for(var i=0;i<fufen.length;i++){
|
||||
fuzong=fuzong+fufen[i];
|
||||
}
|
||||
for(var a=0;a<zheng.length;a++){
|
||||
if(zhengfen[a]<min_abs(fuzong)){
|
||||
fuzong=fuzong+zhengfen[a];
|
||||
}
|
||||
else{
|
||||
gold[zheng[a]]=min_abs(fuzong);
|
||||
if(a+1<zheng.length){
|
||||
for(var k=zheng.length-(a+1);k<zheng.length;k++){
|
||||
gold[zheng[k]]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for(var a=0;a<o_aset.maxman;a++){
|
||||
o_desk.data.gold_score[a]=o_desk.data.gold_score[a]+gold[a];
|
||||
}
|
||||
return gold;
|
||||
}
|
||||
//底牌倍数
|
||||
cls_method_doudizhu.beishu = function(o_aset,cards){
|
||||
var cardlist = cls_aset2_doudizhu.CardIdsToCards(o_aset,cards);
|
||||
cardlist = cls_card2_doudizhu.SortCardList(cardlist,[0,3]);
|
||||
var fh = [];
|
||||
//什么牌型
|
||||
var fanhui=cls_card2_doudizhu.GetMaxCardTypeByCardList(cardlist,0);
|
||||
var result = 1;
|
||||
var wang = [0,0,0];
|
||||
var huase = [0,0,0,0];
|
||||
var tonghua = -1;
|
||||
for(var i=0;i<3;i++){
|
||||
var dx = cls_card2_doudizhu.GetNumber(cardlist[i]);
|
||||
var hua = cls_card2_doudizhu.GetFlower(cardlist[i]);
|
||||
if(dx==53||dx==54){
|
||||
if(dx==53){
|
||||
wang[0]++;
|
||||
wang[2]++;
|
||||
}else{
|
||||
wang[1]++;
|
||||
wang[2]++;
|
||||
}
|
||||
}else{
|
||||
huase[hua-1]++;
|
||||
}
|
||||
}
|
||||
//有没有同花
|
||||
for(var i=0;i<3;i++){
|
||||
if(huase[i]==3){
|
||||
tonghua = 1;
|
||||
}
|
||||
}
|
||||
//返回倍数
|
||||
if((fanhui[0][0]==2&&fanhui[0][1]==1)||wang[2]==1){
|
||||
result = 2;
|
||||
}if((fanhui[0][0]==1&&fanhui[0][1]==3)||tonghua==1){
|
||||
result = 3;
|
||||
}if(fanhui[0][0]==3&&fanhui[0][1]==1){
|
||||
result = 4;
|
||||
}if(wang[2]==2){
|
||||
result = 5;
|
||||
}
|
||||
return result ;
|
||||
}
|
||||
//根据下家张数微调牌型
|
||||
cls_method_doudizhu.weitiao = function(o_aset,seat){
|
||||
var keyi =0;
|
||||
var xia = (seat+1)%o_aset.maxman;
|
||||
if(seat==o_aset.banker||xia==o_aset.banker){
|
||||
if(o_aset.rest[xia]==1){
|
||||
for(var j=0;j<o_aset.point_cards[seat].length;j++){
|
||||
if(o_aset.point_cards[seat][j].length>1){
|
||||
keyi = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return keyi;
|
||||
}
|
||||
//最后一手自动出
|
||||
cls_method_doudizhu.zidong = function(o_desk,o_aset,seat){
|
||||
var fanhui = [];
|
||||
if(seat==o_aset.maxplayer){
|
||||
var result = cls_arith_doudizhu.playcards(o_desk,o_aset.hand_cards[seat],o_aset.shangjia,1);
|
||||
if(result[0]>=1){
|
||||
fanhui = o_aset.hand_cards[seat];
|
||||
}
|
||||
}
|
||||
return fanhui;
|
||||
}
|
||||
//
|
||||
//除牌
|
||||
cls_method_doudizhu.not_cards = function(o_desk,o_aset){
|
||||
//根据配置
|
||||
if(o_desk.data.roomtype[8] == 2){
|
||||
for (var i = 0; i < o_aset.cardlist.length; i++){
|
||||
var o_card = o_aset.cardlist[i];
|
||||
var card_number = cls_aset2_doudizhu.get_cardclass().GetNumber(o_card);
|
||||
var card_flower = cls_aset2_doudizhu.get_cardclass().GetFlower(o_card);
|
||||
for(var j=0;j<o_desk.data.gameConfig.del_cards.length;j++){
|
||||
if(card_number==o_desk.data.gameConfig.del_cards[j][0]){//物理大小
|
||||
for(var k=0;k<o_desk.data.gameConfig.del_cards[j][1].length;k++){
|
||||
if(card_flower==o_desk.data.gameConfig.del_cards[j][1][k]){//花色是不是
|
||||
cls_aset2_doudizhu.get_cardclass().SetDeal(o_card, -2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//更改配置
|
||||
cls_method_doudizhu.change_Config = function(o_desk){
|
||||
if(o_desk.data.roomtype[8] == 2){
|
||||
o_desk.data.paixing[2][1]=[1,3];
|
||||
o_desk.data.paixing[9][1]=[2,2];
|
||||
}
|
||||
}
|
||||
|
||||
199
codes/games/server/games/Doudizhu/method/method.ddz.time.js
Normal file
199
codes/games/server/games/Doudizhu/method/method.ddz.time.js
Normal file
@@ -0,0 +1,199 @@
|
||||
var cls_method_doudizhu = cls_method_doudizhu || {};
|
||||
//获取时间
|
||||
cls_method_doudizhu.get_time = function(){
|
||||
var data = new Date();
|
||||
var hour = data.getHours();
|
||||
var min = data.getMinutes();
|
||||
var sec = data.getSeconds();
|
||||
//小时
|
||||
if(hour<10){
|
||||
hour = "0"+hour;
|
||||
}
|
||||
//分钟
|
||||
if(min<10){
|
||||
min = "0"+min;
|
||||
}
|
||||
//秒
|
||||
if(sec<10){
|
||||
sec = "0"+sec;
|
||||
}
|
||||
var time =min_day()+" "+hour+":"+min+":"+sec;
|
||||
return time ;
|
||||
}
|
||||
//先手出牌
|
||||
cls_method_doudizhu.start_card = function(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
//对象克隆 使数组相等
|
||||
cls_method_doudizhu.clone = function(myObj){
|
||||
return JSON.parse(JSON.stringify(myObj));
|
||||
}
|
||||
|
||||
//判断是否为数组
|
||||
cls_method_doudizhu.isArray = function(o){
|
||||
return Object.prototype.toString.call(o)=='[object Array]';
|
||||
}
|
||||
|
||||
// 数字排序
|
||||
// _list:需要排序的一维数组
|
||||
// mode:是否从小到大(true or 1:从小到大 false、0 or 不填:从大到小)
|
||||
cls_method_doudizhu.sortArray = function(_list,mode){
|
||||
var sortList = cls_method_doudizhu.clone(_list);
|
||||
if(mode){
|
||||
sortList.sort(function(a,b){return a>b?1:-1});
|
||||
}else{
|
||||
sortList.sort(function(a,b){return a<b?1:-1});
|
||||
}
|
||||
}
|
||||
|
||||
//删除数组元素(传入元素)
|
||||
cls_method_doudizhu.removeElementFromArray = function(_list,val){
|
||||
var list = cls_method_doudizhu.clone(_list);
|
||||
for(var i=0; i < list.length; i++) {
|
||||
if(list[i] == val) {
|
||||
list.splice(i, 1);
|
||||
return list;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//删除数组元素(传入数组)
|
||||
// cls_method_doudizhu.removeListFromArray = function(_list1,_list2){
|
||||
// var list1 = cls_method_doudizhu.clone(_list1);
|
||||
// var list2 = cls_method_doudizhu.clone(_list2);
|
||||
// for(var i=0;i<list2.length;i++){
|
||||
// for(var j=0;j<list1.length;j++){
|
||||
// if(list1[j] == list2[i]){
|
||||
// list1.splice(j,1);
|
||||
// j--;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return list1;
|
||||
// }
|
||||
//删除数组元素(传入数组)
|
||||
cls_method_doudizhu.removeListFromArray = function(_list1,_list2){
|
||||
var list1 = cls_method_doudizhu.clone(_list1);
|
||||
var list2 = cls_method_doudizhu.clone(_list2);
|
||||
for(var i=0;i<list2.length;i++){
|
||||
for(var j=0;j<list1.length;j++){
|
||||
if(list1[j].toString() === list2[i].toString()){
|
||||
list1.splice(j,1);
|
||||
j--;
|
||||
}
|
||||
}
|
||||
}
|
||||
return list1;
|
||||
}
|
||||
//数组去重
|
||||
cls_method_doudizhu.distinct = function(arr) {
|
||||
var arr = arr,
|
||||
i,
|
||||
obj = {},
|
||||
result = [],
|
||||
len = arr.length;
|
||||
for(i = 0; i < arr.length; i++) {
|
||||
if(!obj[arr[i]]) { //如果能查找到,证明数组元素重复了
|
||||
obj[arr[i]] = 1;
|
||||
result.push(arr[i]);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//打乱数组 用法:XXX(数组).sort(randomsort);
|
||||
cls_method_doudizhu.randomsort = function(a, b) {
|
||||
return Math.random()>.5 ? -1 : 1;
|
||||
//用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
|
||||
}
|
||||
|
||||
//获取5 10 K的 ID(传入ID) 一般用于捡分
|
||||
cls_method_doudizhu.get_510K = function(shoupai){
|
||||
var wu = [];
|
||||
var shi = [];
|
||||
var k = [];
|
||||
var result = [[],[],[]];
|
||||
for(var a = 0;a<shoupai.length;a++){
|
||||
var yu = shoupai[a] % 54;
|
||||
var jieguo = yu % 13 + 1;
|
||||
if(jieguo == 5){
|
||||
wu.push(shoupai[a]);
|
||||
}else if(jieguo == 10){
|
||||
shi.push(shoupai[a]);
|
||||
}else if(jieguo == 13){
|
||||
k.push(shoupai[a]);
|
||||
}
|
||||
}
|
||||
result[0] = result[0].concat(wu);
|
||||
result[1] = result[1].concat(shi);
|
||||
result[2] = result[2].concat(k);
|
||||
return result;
|
||||
}
|
||||
|
||||
cls_method_doudizhu.jigeji = function(result) {//返回一个数组中有几个几 [2,2,2,3,3,3,4,5] 返回值为:[[2,3],[3,3],[4,1],[5,1]]
|
||||
var arr = [];
|
||||
result.sort();
|
||||
for(var i = 0; i < result.length;) {
|
||||
var count = 0;
|
||||
for(var j = i; j < result.length; j++) {
|
||||
if(result[i] === result[j]) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
arr.push([result[i],count]);
|
||||
i += count;
|
||||
}
|
||||
// var rr = 0;
|
||||
// for (var i = 0; i < arr.length; i++) {
|
||||
// if (arr[i].count == 3) {
|
||||
// rr++;
|
||||
// }
|
||||
// }
|
||||
return arr;
|
||||
}
|
||||
|
||||
//从一个给定的数组arr中,随机返回num个不重复项
|
||||
cls_method_doudizhu.getArrayItems = function(arr, num){
|
||||
//新建一个数组,将传入的数组复制过来,用于运算,而不要直接操作传入的数组;
|
||||
var temp_array = new Array();
|
||||
for (var index in arr) {
|
||||
temp_array.push(arr[index]);
|
||||
}
|
||||
//取出的数值项,保存在此数组
|
||||
var return_array = new Array();
|
||||
for (var i = 0; i<num; i++) {
|
||||
//判断如果数组还有可以取出的元素,以防下标越界
|
||||
if (temp_array.length>0) {
|
||||
//在数组中产生一个随机索引
|
||||
var arrIndex = Math.floor(Math.random()*temp_array.length);
|
||||
//将此随机索引的对应的数组元素值复制出来
|
||||
return_array[i] = temp_array[arrIndex];
|
||||
//然后删掉此索引的数组元素,这时候temp_array变为新的数组
|
||||
temp_array.splice(arrIndex, 1);
|
||||
} else {
|
||||
//数组中数据项取完后,退出循环,比如数组本来只有10项,但要求取出20项.
|
||||
break;
|
||||
}
|
||||
}
|
||||
return return_array;
|
||||
}
|
||||
|
||||
cls_method_doudizhu.duplicate = function(arr) { //数组中相同数tmp 有几个tem.length
|
||||
var tmp = [];
|
||||
arr.concat().sort().sort(function(a, b) {
|
||||
if(a == b && tmp.indexOf(a) === -1) tmp.push(a);
|
||||
});
|
||||
return tmp;
|
||||
}
|
||||
|
||||
cls_method_doudizhu.hebing = function(arr) {//将N维数组合并为一个一维数组
|
||||
var arr1 = (arr + '').split(','); //将数组转字符串后再以逗号分隔转为数组
|
||||
var arr2 = arr1.map(function(x) {
|
||||
return Number(x);
|
||||
});
|
||||
return arr2;
|
||||
}
|
||||
|
||||
383
codes/games/server/games/Doudizhu/mod.js
Normal file
383
codes/games/server/games/Doudizhu/mod.js
Normal file
@@ -0,0 +1,383 @@
|
||||
var mod_doudizhu= mod_doudizhu || cls_mod.new("mod_doudizhu", "doudizhu", youle_app);
|
||||
////////////////////////////////
|
||||
min_loadJsFile("games7/Doudizhu/class.import.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/class.export.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/class.aset2.ddz.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/class.card2.ddz.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/desk.ddz.js", function(){
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
min_loadJsFile("games7/Doudizhu/arith/arith.ddz.playcards.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/arith/arith.ddz.score.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/send/ddz.send.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/save/ddz.save.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/arith/arith.ddz.robot.js", function(){
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
min_loadJsFile("games7/Doudizhu/method/method.ddz.enough.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/method/method.ddz.time.js", function(){
|
||||
});
|
||||
});
|
||||
min_loadJsFile("games7/Doudizhu/process/process.ddz.begin.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/process/process.ddz.dealcards.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/process/process.ddz.end.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/process/process.ddz.lootbanket.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/process/process.ddz.playcards.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/process/process.ddz.help_play.js", function(){
|
||||
min_loadJsFile("games7/Doudizhu/process/process.ddz.control.js", function(){
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
mod_doudizhu.import = null;
|
||||
mod_doudizhu.export = null;
|
||||
mod_doudizhu.zidong = 1;
|
||||
mod_doudizhu.sudu = 1;
|
||||
//抢庄
|
||||
mod_doudizhu.lootbanket = 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 score = pack.data.score;
|
||||
var o_room = mod_doudizhu.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;
|
||||
}
|
||||
//找到牌桌后一定要调用牌桌的.method.save_receivepack方法
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
if(o_room.battlestate!=1){ ////不是开战
|
||||
return;
|
||||
}
|
||||
//获取当前小局对象
|
||||
var o_aset=o_desk.method.CurrAset();
|
||||
if(o_aset.playerlist[3][seat]!=-1){//抢了庄
|
||||
return ;
|
||||
}
|
||||
if(o_aset.stage!=0){ //是不是抢庄阶段
|
||||
return ;
|
||||
}
|
||||
if(score<o_aset.down_score[0]&&score>0){ //
|
||||
return ;
|
||||
}
|
||||
clearTimeout(o_desk.timer.ds[1]);
|
||||
//
|
||||
o_desk.flow.lootbanket(seat,score);
|
||||
}
|
||||
//加倍
|
||||
mod_doudizhu.more = 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 more = pack.data.more;
|
||||
var o_room = mod_doudizhu.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;
|
||||
}
|
||||
//找到牌桌后一定要调用牌桌的.method.save_receivepack方法
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
if(o_room.battlestate!=1){ ////不是开战
|
||||
return;
|
||||
}
|
||||
//获取当前小局对象
|
||||
var o_aset=o_desk.method.CurrAset();
|
||||
if(o_aset.playerlist[4][seat]!=-1){//加倍了
|
||||
return ;
|
||||
}
|
||||
if(o_aset.stage!=1){ //是不是加倍阶段
|
||||
return ;
|
||||
}
|
||||
clearTimeout(o_desk.timer.dingshi[seat]);
|
||||
//
|
||||
o_desk.flow.more(seat,more);
|
||||
}
|
||||
//包庄
|
||||
mod_doudizhu.baozhuang = 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 more = pack.data.more;
|
||||
var o_room = mod_doudizhu.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;
|
||||
}
|
||||
//找到牌桌后一定要调用牌桌的.method.save_receivepack方法
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
if(o_room.battlestate!=1){ ////不是开战
|
||||
return;
|
||||
}
|
||||
//获取当前小局对象
|
||||
var o_aset=o_desk.method.CurrAset();
|
||||
if(o_aset.playerlist[4][seat]!=-1){//加倍了
|
||||
return ;
|
||||
}
|
||||
if(o_aset.stage!=1){ //是不是加倍阶段
|
||||
return ;
|
||||
}
|
||||
clearTimeout(o_desk.timer.dingshi[seat]);
|
||||
//
|
||||
o_desk.flow.baozhuang(seat,more);
|
||||
}
|
||||
//出牌
|
||||
mod_doudizhu.playcards = 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 caozuo = pack.data.caozuo;
|
||||
var o_room = mod_doudizhu.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;
|
||||
}
|
||||
//找到牌桌后一定要调用牌桌的.method.save_receivepack方法
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
if(o_room.battlestate!=1){ ////不是开战
|
||||
return;
|
||||
}
|
||||
//获取当前小局对象
|
||||
var o_aset=o_desk.method.CurrAset();
|
||||
if(o_aset.stage!=2){ //是不是当前阶段
|
||||
return ;
|
||||
}
|
||||
if(caozuo!=o_aset.caozuo){//是不是当前操作
|
||||
return;
|
||||
}
|
||||
if(seat!=o_aset.control){//控制权不是自己
|
||||
return;
|
||||
}
|
||||
//
|
||||
o_desk.flow.playcards(seat,cards);
|
||||
}
|
||||
//不出
|
||||
mod_doudizhu.display = 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 caozuo = pack.data.caozuo;
|
||||
var o_room = mod_doudizhu.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;
|
||||
}
|
||||
//找到牌桌后一定要调用牌桌的.method.save_receivepack方法
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
if(o_room.battlestate!=1){ ////不是开战
|
||||
return;
|
||||
}
|
||||
//获取当前小局对象
|
||||
var o_aset=o_desk.method.CurrAset();
|
||||
if(o_aset.stage!=2){ //是不是当前阶段
|
||||
return ;
|
||||
}
|
||||
if(caozuo!=o_aset.caozuo){//是不是当前操作
|
||||
return;
|
||||
}
|
||||
if(seat!=o_aset.control){//控制权不是自己
|
||||
return;
|
||||
}
|
||||
if(seat==o_aset.maxplayer){//自己是最大
|
||||
return ;
|
||||
}
|
||||
//
|
||||
o_desk.flow.display(seat);
|
||||
}
|
||||
//托管
|
||||
mod_doudizhu.help_play = 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 = mod_doudizhu.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;
|
||||
}
|
||||
//找到牌桌后一定要调用牌桌的.method.save_receivepack方法
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
if(o_room.battlestate!=1){ ////不是开战
|
||||
return;
|
||||
}
|
||||
//获取当前小局对象
|
||||
var o_aset=o_desk.method.CurrAset();
|
||||
if(o_aset.stage!=2){ //不是打牌
|
||||
return;
|
||||
}
|
||||
//
|
||||
o_desk.flow.help_play(seat);
|
||||
}
|
||||
//明牌
|
||||
mod_doudizhu.mingpai = 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 = mod_doudizhu.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;
|
||||
}
|
||||
//找到牌桌后一定要调用牌桌的.method.save_receivepack方法
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
if(o_room.battlestate!=1){ ////不是开战
|
||||
return;
|
||||
}
|
||||
//获取当前小局对象
|
||||
var o_aset=o_desk.method.CurrAset();
|
||||
if(o_aset.stage!=2){ //是不是当前阶段
|
||||
return ;
|
||||
}
|
||||
var result = false ;
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(o_desk.data.mp_zt[i]==1){
|
||||
result = true ;
|
||||
}
|
||||
}
|
||||
//之前叫过地主了
|
||||
if(result){
|
||||
return ;
|
||||
}
|
||||
//
|
||||
o_desk.flow.mingpai(seat);
|
||||
}
|
||||
//准备
|
||||
mod_doudizhu.ready = 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 mingpai = pack.data.mingpai;
|
||||
var o_room = mod_doudizhu.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;
|
||||
}
|
||||
//找到牌桌后一定要调用牌桌的.method.save_receivepack方法
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
if(o_room.battlestate!=1){ ////不是开战
|
||||
return;
|
||||
}
|
||||
//获取当前小局对象
|
||||
var o_aset=o_desk.method.CurrAset();
|
||||
//
|
||||
if(o_aset.playerlist[1][seat]!=-1){//是不是准备状态
|
||||
return;
|
||||
}
|
||||
if(o_desk.o_room.infinite!=1){
|
||||
if(o_aset.stage!=3){ //是不是当前阶段
|
||||
return ;
|
||||
}
|
||||
}
|
||||
var guo = false;
|
||||
if(mingpai==1){
|
||||
for(var i=0;i<3;i++){
|
||||
if(o_desk.data.mp_zt[i]==1){
|
||||
guo = true;
|
||||
}
|
||||
}
|
||||
if(guo){
|
||||
return;
|
||||
}
|
||||
}
|
||||
clearTimeout(o_room.o_desk.timer.own[seat]);
|
||||
//
|
||||
o_desk.flow.ready(seat,mingpai);
|
||||
}
|
||||
//玩家准备
|
||||
mod_doudizhu.wx_zb = 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 = mod_doudizhu.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_aset = o_desk.method.CurrAset();
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
//
|
||||
if(o_room.seatlist[seat].gameinfo.isprepare == 0){
|
||||
o_room.seatlist[seat].gameinfo.isprepare = 1;
|
||||
}
|
||||
mod_doudizhu.export.player_prepare(o_room, seat);
|
||||
o_desk.debug.save_sendpack(pack, seat, playerid);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
var cls_process_doudizhu = cls_process_doudizhu || {};
|
||||
//服务器数据对象
|
||||
cls_process_doudizhu.get_server = function(o_desk){
|
||||
var server = o_desk.data.server[o_desk.data.server.length-1];
|
||||
return server ;
|
||||
}
|
||||
//
|
||||
cls_process_doudizhu.new_server = function(o_desk){
|
||||
var server = cls_aset2_doudizhu.server();
|
||||
o_desk.data.server.push(server);
|
||||
}
|
||||
//开战
|
||||
cls_process_doudizhu.begin = function(o_desk){
|
||||
//无限局
|
||||
if(o_desk.o_room.infinite ==1){
|
||||
//初始化小局数据
|
||||
o_desk.data.asetlist=[];
|
||||
o_desk.data.server=[];
|
||||
cls_arith_doudizhu.begin_wx(o_desk);
|
||||
cls_arith_doudizhu.jiqiren_cz(o_desk);
|
||||
o_desk.data.grade = [0,0,0];
|
||||
o_desk.data.gold_score = [0,0,0];
|
||||
o_desk.data.gold = [0,0,0];
|
||||
o_desk.data.bugou = [-1,-1,-1];
|
||||
o_desk.data.pjhf = []; //(暂定)
|
||||
o_desk.data.hand_cards = []; //记录每个人每局的手牌
|
||||
o_desk.data.undercards = []; //记录每局的底牌
|
||||
o_desk.data.di_bei = []; //记录每局的底牌的倍数
|
||||
o_desk.data.banker=[]; //记录每局的庄
|
||||
o_desk.data.down_score = [];
|
||||
o_desk.data.mingpai_zt = [];
|
||||
o_desk.data.bei = [];
|
||||
}
|
||||
//新建牌局
|
||||
o_desk.method.NewAset();
|
||||
this.new_server(o_desk);
|
||||
//获取当前小局对象
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
//玩家状态改变
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
o_desk.o_room.seatlist[i].gameinfo.isbet =1;
|
||||
o_desk.o_room.seatlist[i].gameinfo.isprepare =1;
|
||||
o_aset.playerlist[2][i] = 1;
|
||||
o_aset.maxman++;
|
||||
//全托
|
||||
// if(o_desk.data.roomtype[6]==1){
|
||||
// o_desk.data.tuoguan[i]=1;
|
||||
// }
|
||||
}
|
||||
}
|
||||
o_aset.num = [o_desk.data.asetlist.length,o_desk.o_room.asetcount];
|
||||
o_aset.down_score[1] = o_desk.data.gameConfig.dizhu[o_desk.data.roomtype[6]-1];
|
||||
//需要改变牌算法大小的
|
||||
//-----举例------
|
||||
for(var i=0;i<o_aset.cardlist.length;i++){
|
||||
if(cls_card2_doudizhu.GetNumber(o_aset.cardlist[i])==2){//是2的话 让算法大小变成15
|
||||
cls_card2_doudizhu.SetArithN(o_aset.cardlist[i],16);
|
||||
}if(cls_card2_doudizhu.GetNumber(o_aset.cardlist[i])==1){//是2的话 让算法大小变成15
|
||||
cls_card2_doudizhu.SetArithN(o_aset.cardlist[i],14);
|
||||
}
|
||||
}
|
||||
//发包
|
||||
cls_doudizhu_send.begin(o_desk,o_aset);
|
||||
//转控制台
|
||||
o_desk.flow.control(1);
|
||||
// var bao = function(){
|
||||
// //准备发牌
|
||||
// o_desk.flow.dealcard();
|
||||
// }
|
||||
// o_desk.timer.ds[0] = setTimeout(bao,50);
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
var cls_process_doudizhu = cls_process_doudizhu || {};
|
||||
//控制台
|
||||
cls_process_doudizhu.control = function(o_desk,change){
|
||||
//小局对象
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
//返回函数
|
||||
var bao = function(seat){
|
||||
switch(o_desk.data.gameConfig.process[o_aset.cishu][0]){
|
||||
case 1:
|
||||
o_desk.flow.dealcard();//发牌
|
||||
break;
|
||||
case 2:
|
||||
var chuan = 0;
|
||||
if(o_desk.o_room.seatlist[o_aset.control].isrobot==1){//如果是机器人
|
||||
var shuzu = [0];
|
||||
for(var k=1;k<=3;k++){
|
||||
if(k>o_aset.down_score[0]){
|
||||
shuzu.push(k);
|
||||
}
|
||||
}
|
||||
var idx = min_random(0,shuzu.length-1);
|
||||
chuan = shuzu[idx];
|
||||
}
|
||||
o_desk.flow.lootbanket(o_aset.control,chuan);//抢庄
|
||||
break;
|
||||
case 3:
|
||||
var chuan = 0;
|
||||
if(o_desk.o_room.seatlist[seat].isrobot==1){//如果是机器人
|
||||
chuan = min_random(0,1);
|
||||
}
|
||||
o_desk.flow.more(seat,0);//加倍
|
||||
break;
|
||||
case 4:
|
||||
o_desk.flow.baozhuang(seat,0);//包庄
|
||||
break;
|
||||
}
|
||||
}
|
||||
//
|
||||
if(change){
|
||||
o_aset.cishu++;
|
||||
}
|
||||
var time = o_desk.data.gameConfig.process[o_aset.cishu][1];
|
||||
if(mod_doudizhu.zidong==1||o_aset.cishu==0){
|
||||
//开启定时器 根据配置的模式 时间
|
||||
if(o_desk.data.gameConfig.process[o_aset.cishu][2]==-1){
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(o_desk.o_room.seatlist[i].isrobot==1){
|
||||
time=min_random(o_desk.data.gameConfig.process[o_aset.cishu][1]-1500,o_desk.data.gameConfig.process[o_aset.cishu][1])
|
||||
}else{
|
||||
time= o_desk.data.gameConfig.process[o_aset.cishu][1]+500;
|
||||
}
|
||||
(function(i){
|
||||
o_desk.timer.dingshi[i]=setTimeout(function(){bao(i);;
|
||||
},time)}
|
||||
)(i);
|
||||
}
|
||||
}if(o_desk.data.gameConfig.process[o_aset.cishu][2]==0){
|
||||
if(o_aset.cishu>0&&o_desk.o_room.seatlist[o_aset.control].isrobot==1){
|
||||
time = min_random(time-11000,time-10000);
|
||||
}
|
||||
o_desk.timer.ds[o_aset.cishu] = setTimeout(bao,time);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
var cls_process_doudizhu = cls_process_doudizhu || {};
|
||||
//发牌
|
||||
cls_process_doudizhu.dealcard = function(o_desk){
|
||||
//小局对象
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
var server = o_desk.flow.get_server();
|
||||
o_aset.stage = 0;
|
||||
//除牌
|
||||
cls_method_doudizhu.not_cards(o_desk,o_aset);
|
||||
//发牌
|
||||
cls_aset2_doudizhu.DealCard(o_aset,o_desk);
|
||||
//谁先叫分
|
||||
if(o_aset.num[0]==1){
|
||||
o_aset.control = min_random(0,o_aset.maxman-1);
|
||||
o_desk.data.winner = o_aset.control;
|
||||
}else{
|
||||
o_aset.control = (o_desk.data.winner+1)%o_aset.maxman;
|
||||
}
|
||||
//手牌
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
o_aset.hand_cards[i]=cls_aset2_doudizhu.GetDealCardIdsBySeat(o_aset,i);
|
||||
o_aset.rest[i]=o_aset.hand_cards[i].length;
|
||||
// server.hand_cards.push(min_copyjson(o_aset.hand_cards[i]));
|
||||
//有人明牌了倍数变 并且明牌
|
||||
if(o_desk.data.mp_zt[i]==1){
|
||||
o_aset.bei = 5;
|
||||
o_aset.team_cards[i] = o_aset.hand_cards[i];
|
||||
o_aset.control = i;
|
||||
o_aset.winner =i;
|
||||
}
|
||||
}
|
||||
}
|
||||
//进入控制台
|
||||
o_desk.flow.control(1);
|
||||
//发包
|
||||
cls_doudizhu_send.dealcard(o_desk,o_aset);
|
||||
}
|
||||
//要牌
|
||||
cls_process_doudizhu.givecard = function(o_desk,seat,count){
|
||||
//小局对象
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
var bottomcardlist = cls_aset2_doudizhu.GetBottomCards(o_aset);
|
||||
// o_aset.undercards = cls_aset2_doudizhu.CardsToCardIds(bottomcardlist);
|
||||
//底牌里随机选
|
||||
for(var u=0;u<count;u++){
|
||||
var idx = min_random(0,bottomcardlist.length-1);
|
||||
cls_aset2_doudizhu.get_cardclass().SetStart(bottomcardlist[idx], seat);
|
||||
cls_aset2_doudizhu.get_cardclass().SetDeal(bottomcardlist[idx], seat);
|
||||
var shuzu = [bottomcardlist[idx]];
|
||||
o_aset.undercards.push(cls_aset2_doudizhu.CardsToCardIds(shuzu));
|
||||
//拿了牌删掉
|
||||
bottomcardlist.splice(idx,1);
|
||||
}
|
||||
o_aset.hand_cards[seat]=cls_aset2_doudizhu.GetDealCardIdsBySeat(o_aset,seat);
|
||||
if(o_desk.data.mp_zt[seat]==1){
|
||||
o_aset.team_cards[seat] = o_aset.hand_cards[seat];
|
||||
}
|
||||
o_aset.rest[seat]=o_aset.hand_cards[seat].length;
|
||||
}
|
||||
//弃牌
|
||||
cls_process_doudizhu.discard = function(o_desk,seat,count){
|
||||
//小局对象
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
}
|
||||
182
codes/games/server/games/Doudizhu/process/process.ddz.end.js
Normal file
182
codes/games/server/games/Doudizhu/process/process.ddz.end.js
Normal file
@@ -0,0 +1,182 @@
|
||||
var cls_process_doudizhu = cls_process_doudizhu || {};
|
||||
//小局
|
||||
cls_process_doudizhu.aset = function(o_desk,type){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
o_aset.stage = 3;
|
||||
o_desk.data.mp_zt = [-1,-1,-1];
|
||||
o_desk.data.tuoguan = [-1,-1,-1];
|
||||
//
|
||||
this.asetA(o_desk,type,o_aset);
|
||||
this.asetB(o_desk,type,o_aset);
|
||||
}
|
||||
//处理
|
||||
cls_process_doudizhu.asetA = function(o_desk,type,o_aset){
|
||||
//分数处理
|
||||
cls_arith_doudizhu.score(o_desk);
|
||||
if((o_aset.num[1]==o_aset.num[0])||(o_desk.data.roomtype[3]==2&&o_desk.data.enough==1&&o_desk.o_room.infinite !=1)){
|
||||
o_aset.end = 2;
|
||||
o_aset.stage = 4;
|
||||
}
|
||||
if(o_desk.o_room.infinite ==1){
|
||||
o_aset.stage = -1;
|
||||
}
|
||||
//无限局
|
||||
cls_arith_doudizhu.xiaoju_wx(o_desk);
|
||||
var shijian = cls_method_doudizhu.get_time();
|
||||
//发包
|
||||
cls_doudizhu_send.aset(o_desk,o_aset,shijian);
|
||||
if(o_desk.o_room.infinite !=1){
|
||||
cls_doudizhu_save.aset(o_desk,o_aset);
|
||||
}else{
|
||||
o_aset.stage = -1;
|
||||
}
|
||||
//扣卡
|
||||
mod_doudizhu.import.deduct_roomcard(o_desk.o_room);
|
||||
/////////小局保存这局的收发包情况
|
||||
o_desk.debug.save_pack_curraset();
|
||||
//////////保存牌局///////////
|
||||
youle_room.export.backup_room(o_desk.o_room,o_desk.data);
|
||||
}
|
||||
//处理完之后
|
||||
cls_process_doudizhu.asetB = function(o_desk,type,o_aset){
|
||||
if(o_desk.o_room.infinite !=1){
|
||||
// cls_doudizhu_save.aset(o_desk,o_aset);
|
||||
if((o_aset.num[1]==o_aset.num[0])||(o_desk.data.roomtype[3]==2&&o_desk.data.enough==1)){
|
||||
if(o_aset.num[1]!=o_aset.num[0]){
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
cls_doudizhu_send.tichu(o_desk.o_room,i,3);
|
||||
}
|
||||
}else{
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
mod_doudizhu.import.finish_gametask(o_desk.o_room.o_game.o_agent.agentid, o_desk.o_room.seatlist[i], '1iyuKXRouftbkpghjabeZ7O0LMgsG7v8', 1);
|
||||
}
|
||||
}
|
||||
o_desk.flow.end(1);
|
||||
}else{
|
||||
if(o_desk.o_room.infinite !=1){
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
var time = o_desk.data.gameConfig.playtime[2]*1000;
|
||||
(function(i){
|
||||
o_desk.timer.own[i]=setTimeout(function(){o_desk.flow.ready(i);
|
||||
},time)}
|
||||
)(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
var fb = function(){
|
||||
for(var i=0;i<o_desk.data.bugou.length;i++){
|
||||
if(o_desk.data.bugou[i]!=-1){
|
||||
cls_doudizhu_send.tichu(o_desk.o_room,i,1);
|
||||
mod_doudizhu.app.youle_room.export.kickplayer_inroom(o_desk.o_room, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
var fabao = function(){
|
||||
//无限局
|
||||
cls_arith_doudizhu.xiaoju_tr(o_desk);
|
||||
}
|
||||
o_desk.timer.ds[3]=setTimeout(fb,3000);
|
||||
o_desk.timer.ds[4]=setTimeout(fabao,4000);
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------------
|
||||
//准备
|
||||
cls_process_doudizhu.ready = function(o_desk,seat,mingpai){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
var max = 0;
|
||||
if(mingpai ==1){
|
||||
o_desk.data.mp_zt[seat] = 1;
|
||||
}
|
||||
o_aset.playerlist[1][seat]=1;
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
if(o_aset.playerlist[1][i]==1){
|
||||
max ++ ;
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
if(o_desk.o_room.infinite !=1){
|
||||
//
|
||||
cls_doudizhu_send.ready(o_desk,o_aset,seat);
|
||||
if(max == o_aset.maxman){
|
||||
o_desk.flow.begin();
|
||||
}
|
||||
}else{
|
||||
if(o_desk.o_room.seatlist[seat].gameinfo.isprepare == 0){
|
||||
o_desk.o_room.seatlist[seat].gameinfo.isprepare = 1;
|
||||
}
|
||||
mod_doudizhu.export.player_prepare(o_desk.o_room, seat);
|
||||
cls_doudizhu_send.gold_zb(o_desk,o_aset,seat);
|
||||
}
|
||||
}
|
||||
// ---------------------------------------------------------------------
|
||||
//结束保存战绩
|
||||
cls_process_doudizhu.end = function(o_desk,type){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
if(type==1){
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
mod_doudizhu.import.finish_gametask(o_desk.o_room.o_game.o_agent.agentid, o_desk.o_room.seatlist[i], '1iyuKXRouftbkpghjabeZ7O0LMgsG7v8', 1);
|
||||
}
|
||||
}
|
||||
var xinxi = [];
|
||||
var meiju = [];
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
xinxi[i]=[];
|
||||
}
|
||||
//保存玩家的信息/////////////
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
var wanjia={};
|
||||
wanjia=o_desk.o_room.seatlist[i];
|
||||
xinxi[i][0]=wanjia.nickname;
|
||||
xinxi[i][1]=o_desk.data.grade[i];
|
||||
xinxi[i][2]=wanjia.avatar;
|
||||
xinxi[i][3]=wanjia.playerid;
|
||||
var ziyuan = [wanjia.nickname,wanjia.avatar];
|
||||
o_desk.data.ziyuan.push(min_copyjson(ziyuan));
|
||||
o_desk.data.id.push(min_copyjson(xinxi[i][3]));
|
||||
}
|
||||
if(o_desk.data.asetlist.length>=1&&o_aset.end==-1){
|
||||
var jushu=o_desk.data.asetlist.length-1;
|
||||
}else{
|
||||
var jushu=o_desk.data.asetlist.length;
|
||||
}
|
||||
//每个人每局的得分
|
||||
for(var i=0;i<jushu;i++){
|
||||
meiju[i]=[];
|
||||
for(var j=0;j<o_aset.maxman;j++){
|
||||
meiju[i][j]=[];
|
||||
meiju[i][j][0]=j;
|
||||
meiju[i][j][1]=o_desk.data.xj_score[j][i];
|
||||
}
|
||||
}
|
||||
//保存战绩
|
||||
var gameinfo1 = {};
|
||||
gameinfo1.round = meiju;////每局玩家的分数
|
||||
gameinfo1.playerlist =xinxi;////玩家的头像 昵称 分数
|
||||
gameinfo1.roundsum = jushu; //总局数
|
||||
var gameinfo2={};
|
||||
gameinfo2.roomcode = o_desk.o_room.roomcode;//房间号
|
||||
gameinfo2.asetcount = o_desk.o_room.asetcount;//总局数
|
||||
gameinfo2.roomtype = o_desk.data.roomtype;
|
||||
gameinfo2.ziyuan = o_desk.data.ziyuan;//昵称头像
|
||||
gameinfo2.id= o_desk.data.id;//playerid
|
||||
//-------------------------------------------
|
||||
gameinfo2.hand_cards = o_desk.data.hand_cards;//手牌
|
||||
gameinfo2.undercards=o_desk.data.undercards ; //记录每局的底牌
|
||||
gameinfo2.di_bei=o_desk.data.di_bei ; //记录每局的底牌的倍数
|
||||
gameinfo2.banker=o_desk.data.banker ; //记录每局的庄
|
||||
gameinfo2.down_score=o_desk.data.down_score ;
|
||||
gameinfo2.mingpai_zt=o_desk.data.mingpai_zt ;
|
||||
gameinfo2.bei=o_desk.data.bei ;
|
||||
gameinfo2.pjhf = o_desk.data.pjhf;//打牌回放
|
||||
//----------------------------------------
|
||||
if(o_desk.data.asetlist.length==1&&o_aset.end==-1){
|
||||
mod_doudizhu.import.save_grade(o_desk.o_room, null, null, type);
|
||||
}else{
|
||||
mod_doudizhu.import.save_grade(o_desk.o_room, gameinfo1, gameinfo2, type);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
var cls_process_doudizhu = cls_process_doudizhu || {};
|
||||
//托管
|
||||
cls_process_doudizhu.help_play = function(o_desk,seat){
|
||||
//
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
if(o_desk.data.tuoguan[seat]==-1){
|
||||
o_desk.data.tuoguan[seat]=1;
|
||||
//
|
||||
this.can_help(o_desk,o_aset,seat,1);
|
||||
}else{
|
||||
o_desk.data.tuoguan[seat]=-1;
|
||||
clearTimeout(o_desk.timer.own[seat]);
|
||||
}
|
||||
//发包
|
||||
cls_doudizhu_send.help_play(o_desk,o_aset,seat);
|
||||
}
|
||||
//托管
|
||||
cls_process_doudizhu.can_help = function(o_desk,o_aset,seat,type){
|
||||
if(o_aset.control ==seat){
|
||||
if(o_aset.point_cards[seat].length>0){
|
||||
var bao = function(){
|
||||
if(o_desk.data.tuoguan[seat]==-1){
|
||||
if(o_desk.data.roomtype[9]==2){
|
||||
if(o_aset.point_cards[seat][0].length!=o_aset.rest[seat]){
|
||||
o_desk.data.tuoguan[seat]=1;
|
||||
}
|
||||
//发包
|
||||
cls_doudizhu_send.help_play(o_desk,o_aset,seat);
|
||||
}
|
||||
}
|
||||
//微调出牌
|
||||
var result = cls_method_doudizhu.weitiao(o_aset,seat);
|
||||
o_desk.flow.playcards(seat,o_aset.point_cards[seat][result]);
|
||||
}
|
||||
}else{
|
||||
var bao = function(){
|
||||
if(o_desk.data.tuoguan[seat]==-1){
|
||||
if(o_desk.data.roomtype[9]==2){
|
||||
o_desk.data.tuoguan[seat]=1;
|
||||
//发包
|
||||
cls_doudizhu_send.help_play(o_desk,o_aset,seat);
|
||||
}
|
||||
}
|
||||
o_desk.flow.display(seat);
|
||||
}
|
||||
}
|
||||
//最后一手牌
|
||||
var leixing = 0;
|
||||
if(o_aset.point_cards[seat].length>=1){
|
||||
for(var k=0;k<o_aset.point_cards[seat].length;k++){
|
||||
if(o_aset.point_cards[seat][k].length==o_aset.rest[seat]){
|
||||
var baocun = o_aset.point_cards[seat][k];
|
||||
o_aset.point_cards[seat] = [];
|
||||
o_aset.point_cards[seat][0] = baocun;
|
||||
leixing =1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//----------------------------------------
|
||||
if(type==1){
|
||||
if((o_desk.o_room.seatlist[seat].isrobot==1)||(o_desk.data.tuoguan[seat]==1)||leixing==1){
|
||||
if(o_aset.caozuo==0){
|
||||
var time = (min_random(4,5)*1000);
|
||||
}else{
|
||||
if(o_desk.data.roomtype[8]){
|
||||
var time = o_desk.data.gameConfig.tg_time[1]/mod_doudizhu.sudu;
|
||||
}else{
|
||||
if(o_desk.o_room.seatlist[seat].isrobot==1){
|
||||
var time = min_random(o_desk.data.gameConfig.tg_time[2],o_desk.data.gameConfig.tg_time[3]);
|
||||
}else{
|
||||
var time = o_desk.data.gameConfig.tg_time[0]/mod_doudizhu.sudu;
|
||||
}
|
||||
}
|
||||
}
|
||||
o_desk.timer.own[seat]=setTimeout(bao,time);
|
||||
}
|
||||
}else{
|
||||
if(mod_doudizhu.zidong==1){
|
||||
if(o_aset.caozuo==0){
|
||||
var time = o_desk.data.gameConfig.playtime[2]*1000+1000;
|
||||
}else{
|
||||
var time = o_desk.data.gameConfig.playtime[2]*1000;
|
||||
}
|
||||
o_desk.timer.zidong[seat]=setTimeout(bao,time);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
var cls_process_doudizhu = cls_process_doudizhu || {};
|
||||
//抢庄
|
||||
cls_process_doudizhu.lootbanket = function(o_desk,seat,count){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
var server = o_desk.flow.get_server();
|
||||
var result = 1 ;
|
||||
o_aset.playerlist[3][seat]=count;
|
||||
//
|
||||
if(o_aset.down_score[0]<count){
|
||||
if(count>0){
|
||||
if(o_aset.down_score[0]>0){
|
||||
o_aset.bei = o_aset.bei/o_aset.down_score[0];
|
||||
}
|
||||
o_aset.bei = o_aset.bei*count;
|
||||
o_aset.down_score[0] = count;
|
||||
}
|
||||
}
|
||||
//
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(o_aset.playerlist[3][i]==-1){
|
||||
result = -1 ;
|
||||
}
|
||||
}
|
||||
//叫地主
|
||||
if(count==3||result==1){
|
||||
var who = -1;
|
||||
//没人叫地主
|
||||
if(o_aset.down_score[0]==0){
|
||||
//有没有人明牌
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(o_desk.data.mp_zt[i]==1){
|
||||
who = i;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
//谁叫的分高
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(o_aset.playerlist[3][i]==o_aset.down_score[0]){
|
||||
who = i ;
|
||||
}
|
||||
}
|
||||
}
|
||||
//有地主
|
||||
if(who>=0){
|
||||
o_aset.stage = 1;
|
||||
o_aset.control = who;
|
||||
o_desk.data.winner = who;
|
||||
o_aset.maxplayer = who;
|
||||
o_aset.banker = who;
|
||||
o_desk.flow.givecard(who,3);
|
||||
//存手牌
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
server.hand_cards.push(min_copyjson(o_aset.hand_cards[i]));
|
||||
}
|
||||
//底牌倍数
|
||||
o_aset.di_bei = cls_method_doudizhu.beishu(o_aset,o_aset.undercards);
|
||||
o_aset.bei = o_aset.bei*o_aset.di_bei;
|
||||
//提示
|
||||
o_aset.point_cards = [[],[],[]];
|
||||
//检测最后一手牌
|
||||
var result = cls_method_doudizhu.zidong(o_desk,o_aset,o_aset.control);
|
||||
if(result.length==0){
|
||||
o_aset.point_cards[o_aset.control]=cls_arith_doudizhu.point(o_desk,o_aset.hand_cards[o_aset.control],o_aset.shangjia);
|
||||
}else{
|
||||
o_aset.point_cards[o_aset.control] =[result];
|
||||
}
|
||||
//进入控制台
|
||||
o_desk.flow.control(1);
|
||||
//自动
|
||||
if(mod_doudizhu.zidong==1){
|
||||
var fabao = function(){
|
||||
o_aset.stage = 2;
|
||||
//发包
|
||||
cls_doudizhu_send.playcards(o_desk,o_aset,1,o_aset.control);
|
||||
}
|
||||
o_desk.timer.ds[1] = setTimeout(fabao,6000);
|
||||
}
|
||||
}else{
|
||||
o_aset.down_score[0] = -1;
|
||||
var bao = function(){
|
||||
//删除当前局
|
||||
o_desk.data.asetlist.splice(o_desk.data.asetlist.length-1,1);
|
||||
o_desk.flow.begin();
|
||||
}
|
||||
o_desk.timer.ds[1] = setTimeout(bao,1500);
|
||||
}
|
||||
}else{
|
||||
o_aset.control= (o_aset.control+1)%o_aset.maxman;
|
||||
//进入控制台
|
||||
o_desk.flow.control();
|
||||
|
||||
}
|
||||
//发包
|
||||
cls_doudizhu_send.lootbanket(o_desk,o_aset,seat);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//加倍
|
||||
cls_process_doudizhu.more = function(o_desk,seat,count){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
var result = true ;
|
||||
o_aset.playerlist[4][seat]=count;
|
||||
if(count==1){
|
||||
o_aset.bei = o_aset.bei*2;
|
||||
}
|
||||
//
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(o_aset.playerlist[4][i]==-1){
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
if(result){
|
||||
o_desk.data.bei.push(o_aset.bei);
|
||||
clearTimeout(o_desk.timer.ds[1]);
|
||||
var fabao = function(){
|
||||
o_aset.stage = 2;
|
||||
//发包
|
||||
cls_doudizhu_send.playcards(o_desk,o_aset,1,o_aset.control);
|
||||
}
|
||||
o_desk.timer.ds[1] = setTimeout(fabao,1000);
|
||||
this.can_help(o_desk,o_aset,o_aset.control,1);
|
||||
this.can_help(o_desk,o_aset,o_aset.control,2);
|
||||
}
|
||||
//发包
|
||||
cls_doudizhu_send.more(o_desk,o_aset,seat);
|
||||
}
|
||||
//明牌
|
||||
cls_process_doudizhu.mingpai = function(o_desk,seat){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
o_aset.bei = o_aset.bei*2;
|
||||
o_desk.data.mp_zt[seat] = 1;
|
||||
o_aset.team_cards[seat] = o_aset.hand_cards[seat];
|
||||
//发包
|
||||
cls_doudizhu_send.mingpai(o_desk,o_aset,seat);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
//包庄
|
||||
cls_process_doudizhu.baozhuang = function(o_desk,seat){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
o_aset.bei = o_aset.bei*2;
|
||||
o_desk.data.mp_zt[seat] = 1;
|
||||
o_aset.team_cards[seat] = o_aset.hand_cards[seat];
|
||||
//发包
|
||||
cls_doudizhu_send.mingpai(o_desk,o_aset,seat);
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
var cls_process_doudizhu = cls_process_doudizhu || {};
|
||||
//出牌控制
|
||||
cls_process_doudizhu.playcards = function(o_desk,seat,cards){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
//手牌里没有这个牌
|
||||
var inhandcardids = cls_aset2_doudizhu.GetCardIdsInhand(o_aset, seat);
|
||||
if (!min_ary_include(inhandcardids, cards)){
|
||||
return ;
|
||||
}
|
||||
// cards = [7,7,7,7,4,3,6,8];
|
||||
var result = cls_arith_doudizhu.playcards(o_desk,cards,o_aset.shangjia);
|
||||
// var result = [1];
|
||||
if(result[0]>=1){
|
||||
clearTimeout(o_desk.timer.own[seat]);
|
||||
clearTimeout(o_desk.timer.zidong[seat]);
|
||||
//可以出
|
||||
this.can_play(o_desk,o_aset,seat,cards,result);
|
||||
//提示
|
||||
o_aset.point_cards = [[],[],[]];
|
||||
//检测最后一手牌
|
||||
var result = cls_method_doudizhu.zidong(o_desk,o_aset,o_aset.control);
|
||||
if(result.length==0){
|
||||
// o_aset.hand_cards[o_aset.control] = [8,8,8,8,6,6,2,4,15,7,9];
|
||||
o_aset.point_cards[o_aset.control]=cls_arith_doudizhu.point(o_desk,o_aset.hand_cards[o_aset.control],o_aset.shangjia);
|
||||
}else{
|
||||
o_aset.point_cards[o_aset.control] =[result];
|
||||
}
|
||||
//发包
|
||||
cls_doudizhu_send.playcards(o_desk,o_aset,1,seat);
|
||||
//保存
|
||||
cls_doudizhu_save.playcards(o_desk,o_aset,seat,1);
|
||||
if(o_aset.end==1){
|
||||
o_desk.flow.aset();
|
||||
}else{
|
||||
this.can_help(o_desk,o_aset,o_aset.control,1);
|
||||
this.can_help(o_desk,o_aset,o_aset.control,2);
|
||||
}
|
||||
}else{
|
||||
//发包
|
||||
cls_doudizhu_send.playcards(o_desk,o_aset,0,seat);
|
||||
}
|
||||
}
|
||||
//可以出 处理控制权
|
||||
cls_process_doudizhu.can_play=function(o_desk,o_aset,seat,cards,result){
|
||||
this.can_playA(o_desk,o_aset,seat,cards,result);
|
||||
this.can_playB(o_desk,o_aset,seat,cards,result);
|
||||
//状态为结束
|
||||
if(o_aset.updown_swim[3]==1){
|
||||
o_aset.end = 1;
|
||||
}else{
|
||||
//控制权转移
|
||||
var xia = 1;
|
||||
for(var a=0;a<o_aset.maxman;a++){
|
||||
if(a==(seat+xia)%o_aset.maxman){//等于下一个座位号
|
||||
if(o_aset.playerlist[0][a]!=3&&o_aset.playerlist[0][a]!=4){
|
||||
o_aset.control=a ;//控制权等于下一个人
|
||||
break;
|
||||
}else{
|
||||
xia=xia+1;
|
||||
if(o_aset.playerlist[0][a]==3){
|
||||
o_aset.playerlist[0][a]=4;
|
||||
}
|
||||
a=-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
o_aset.dealid[o_aset.control]=[];
|
||||
o_aset.playerlist[0][o_aset.control]=-1;
|
||||
}
|
||||
}
|
||||
//处理牌
|
||||
cls_process_doudizhu.can_playA=function(o_desk,o_aset,seat,cards,result){
|
||||
var cardlist=cls_aset2_doudizhu.CardIdsToCards(o_aset,cards);
|
||||
o_aset.cardtype=[result[1],cardlist,result[2]];
|
||||
o_aset.dealid[seat] = cls_arith_doudizhu.paixu(o_desk,cards,o_aset.cardtype[0]);
|
||||
o_aset.shangjia = cards;//上家出的牌
|
||||
if(o_aset.index==o_aset.maxman){//第几轮
|
||||
o_aset.play++;
|
||||
o_aset.index=0;
|
||||
}
|
||||
o_aset.index++;//当前第几操作
|
||||
o_aset.caozuo++;
|
||||
o_aset.maxplayer=-1;//第一个出牌的 -1
|
||||
o_aset.play_ci[seat]++;
|
||||
//算奖
|
||||
var bei = cls_arith_doudizhu.price(o_aset.cardtype,seat);
|
||||
o_aset.bei = o_aset.bei*bei;
|
||||
//改变手牌
|
||||
cls_aset2_doudizhu.doPlayCard(o_aset,seat,cards);
|
||||
o_aset.hand_cards[seat]=cls_aset2_doudizhu.GetCardIdsInhand(o_aset,seat);//手牌
|
||||
o_aset.rest[seat]=o_aset.hand_cards[seat].length;
|
||||
//是否明牌
|
||||
if(o_desk.data.mp_zt[seat]==1){
|
||||
o_aset.team_cards[seat] = o_aset.hand_cards[seat];
|
||||
}
|
||||
}
|
||||
//处理上下游
|
||||
cls_process_doudizhu.can_playB=function(o_desk,o_aset,seat,cards,result){
|
||||
if(o_aset.hand_cards[seat].length==0){
|
||||
o_aset.playerlist[0][seat]=3; //打完的状态
|
||||
o_aset.updown_swim[3]++;
|
||||
if(o_aset.updown_swim[3]==1){
|
||||
if(seat==o_aset.banker){
|
||||
o_aset.winner = 0;
|
||||
var keyi = true;
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(i!=o_aset.banker){
|
||||
if(o_aset.play_ci[i]>0){
|
||||
keyi = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(keyi){
|
||||
o_aset.chuntian = 1;
|
||||
o_aset.bei = o_aset.bei*2;
|
||||
}
|
||||
}else{
|
||||
o_aset.winner = 1;
|
||||
//春天
|
||||
if(o_aset.play_ci[o_aset.banker]==1){
|
||||
o_aset.chuntian = 1;
|
||||
o_aset.bei = o_aset.bei*2;
|
||||
}
|
||||
}
|
||||
}
|
||||
o_aset.updown_swim[seat]=o_aset.updown_swim[3];
|
||||
}else{
|
||||
o_aset.playerlist[0][seat]=1;//打牌的状态
|
||||
}
|
||||
}
|
||||
//---------------------------------
|
||||
//不出
|
||||
cls_process_doudizhu.display = function(o_desk,seat){
|
||||
var o_aset = o_desk.method.CurrAset();
|
||||
var xia =1;
|
||||
o_aset.playerlist[0][seat] = 2;
|
||||
o_aset.caozuo++;
|
||||
for(var a=0;a<o_aset.maxman;a++){
|
||||
if(a==(seat+xia)%o_aset.maxman){//等于下一个座位号
|
||||
if(o_aset.playerlist[0][a]!=4){
|
||||
if(o_aset.playerlist[0][a]!=3){
|
||||
o_aset.control=a;//控制权等于下一个人
|
||||
o_aset.playerlist[0][a]=1;
|
||||
break;
|
||||
}else{
|
||||
xia=xia+1;
|
||||
o_aset.playerlist[0][a]=4;
|
||||
a=-1;
|
||||
}
|
||||
}else{
|
||||
xia=xia+1;
|
||||
a=-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
o_aset.dealid[o_aset.control]=[];
|
||||
o_aset.playerlist[0][o_aset.control]=-1;
|
||||
var cishu=0;
|
||||
for(var i=0;i<o_aset.maxman;i++){
|
||||
if(o_aset.playerlist[0][i]==2||o_aset.playerlist[0][i]==4){
|
||||
cishu=cishu+1;
|
||||
}
|
||||
}
|
||||
if(cishu>=o_aset.maxman-1){
|
||||
o_aset.maxplayer=o_aset.control;
|
||||
o_aset.shangjia = [];
|
||||
o_aset.cardtype = [];
|
||||
for(var j=0;j<o_aset.maxman;j++){
|
||||
if(o_aset.playerlist[0][j]!=3&&o_aset.playerlist[0][j]!=4){
|
||||
o_aset.playerlist[0][j]=-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
//提示
|
||||
o_aset.point_cards = [[],[],[]];
|
||||
//检测最后一手牌
|
||||
var result = cls_method_doudizhu.zidong(o_desk,o_aset,o_aset.control);
|
||||
if(result.length==0){
|
||||
o_aset.point_cards[o_aset.control]=cls_arith_doudizhu.point(o_desk,o_aset.hand_cards[o_aset.control],o_aset.shangjia);
|
||||
}else{
|
||||
o_aset.point_cards[o_aset.control] =[result];
|
||||
}
|
||||
//发包
|
||||
cls_doudizhu_send.display(o_desk,o_aset,seat);
|
||||
//
|
||||
cls_doudizhu_save.playcards(o_desk,o_aset,seat,2);
|
||||
//
|
||||
this.can_help(o_desk,o_aset,o_aset.control,1);
|
||||
this.can_help(o_desk,o_aset,o_aset.control,2);
|
||||
}
|
||||
44
codes/games/server/games/Doudizhu/save/ddz.save.js
Normal file
44
codes/games/server/games/Doudizhu/save/ddz.save.js
Normal file
@@ -0,0 +1,44 @@
|
||||
var cls_doudizhu_save = cls_doudizhu_save || {};
|
||||
//出牌
|
||||
cls_doudizhu_save.playcards = function(o_desk,o_aset,seat,result){
|
||||
if(o_desk.o_room.infinite !=1){
|
||||
var server = o_desk.flow.get_server();
|
||||
var chupai = [];
|
||||
chupai.push(min_copyjson(result));//出牌状态
|
||||
chupai.push(min_copyjson(seat));//座位号
|
||||
chupai.push(min_copyjson(o_aset.dealid));//每个人出的牌
|
||||
chupai.push(min_copyjson(o_aset.hand_cards));//出牌人的手牌
|
||||
chupai.push(min_copyjson(o_aset.playerlist[0]));//当前所有人的出牌状态
|
||||
chupai.push(min_copyjson(o_aset.maxplayer));//当前最大出牌人
|
||||
chupai.push(min_copyjson(o_aset.control));//当前控制权
|
||||
chupai.push(min_copyjson(o_aset.bei));//当前倍数
|
||||
chupai.push(min_copyjson(o_aset.winner));//当前谁赢
|
||||
chupai.push(min_copyjson(o_aset.end));//结束
|
||||
server.pjhf.push(min_copyjson(chupai));
|
||||
chupai = [];
|
||||
}
|
||||
}
|
||||
//小局
|
||||
cls_doudizhu_save.aset = function(o_desk,o_aset,shijian){
|
||||
if(o_desk.o_room.infinite !=1){
|
||||
var server =o_desk.flow.get_server();
|
||||
var chupai = [];
|
||||
chupai.push(min_copyjson(o_aset.bj_score));//每个人本局分
|
||||
chupai.push(min_copyjson(o_aset.bei));//当前倍数
|
||||
chupai.push(min_copyjson(o_aset.maxman));
|
||||
chupai.push(min_copyjson(o_aset.winner));//当前谁赢
|
||||
server.pjhf.push(min_copyjson(chupai));
|
||||
chupai = [];
|
||||
//
|
||||
o_desk.data.pjhf.push(server.pjhf);
|
||||
o_desk.data.hand_cards.push(server.hand_cards);
|
||||
o_desk.data.banker.push(o_aset.banker);
|
||||
o_desk.data.undercards.push(o_aset.undercards);
|
||||
o_desk.data.di_bei.push(o_aset.di_bei);
|
||||
o_desk.data.down_score.push(min_copyjson(o_aset.down_score));//当前底分
|
||||
o_desk.data.mingpai_zt.push(min_copyjson(o_desk.data.mp_zt));//当前明牌状态
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
264
codes/games/server/games/Doudizhu/send/ddz.send.js
Normal file
264
codes/games/server/games/Doudizhu/send/ddz.send.js
Normal file
@@ -0,0 +1,264 @@
|
||||
var cls_doudizhu_send = cls_doudizhu_send || {};
|
||||
//开始
|
||||
cls_doudizhu_send.begin = function(o_desk,o_aset){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "begin";
|
||||
msg.data={
|
||||
num : o_aset.num,
|
||||
roomtype : o_desk.data.roomtype,
|
||||
tuoguan : o_desk.data.tuoguan,
|
||||
maxman : o_aset.maxman,
|
||||
grade : o_desk.data.grade,
|
||||
gold_score : o_desk.data.gold_score,
|
||||
stage : o_aset.stage,
|
||||
playerlist : o_aset.playerlist
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toother(msg, -1);
|
||||
//发包后调用
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
o_desk.debug.save_sendpack(msg, i, o_desk.o_room.seatlist[i].playerid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//发牌
|
||||
cls_doudizhu_send.dealcard = function(o_desk,o_aset){
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "dealcard";
|
||||
msg.data={
|
||||
hand_cards : o_aset.hand_cards[i],
|
||||
control : o_aset.control,
|
||||
rest : o_aset.rest,
|
||||
stage : o_aset.stage,
|
||||
down_score : o_aset.down_score,
|
||||
mp_zt : o_desk.data.mp_zt,
|
||||
team_cards : o_aset.team_cards,
|
||||
bei: o_aset.bei
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toseat(msg, i);
|
||||
//发包调用
|
||||
o_desk.debug.save_sendpack(msg, i, o_desk.o_room.seatlist[i].playerid);
|
||||
}
|
||||
}
|
||||
}
|
||||
//叫分
|
||||
cls_doudizhu_send.lootbanket = function(o_desk,o_aset,seat){
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "lootbanket";
|
||||
msg.data={
|
||||
playerlist : o_aset.playerlist,
|
||||
down_score : o_aset.down_score,
|
||||
control : o_aset.control,
|
||||
stage : o_aset.stage,
|
||||
banker : o_aset.banker,
|
||||
undercards : o_aset.undercards,
|
||||
hand_cards : o_aset.hand_cards[i],
|
||||
seat : seat,
|
||||
bei : o_aset.bei,
|
||||
di_bei : o_aset.di_bei,
|
||||
team_cards : o_aset.team_cards,
|
||||
rest : o_aset.rest
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toseat(msg, i);
|
||||
//发包调用
|
||||
o_desk.debug.save_sendpack(msg, i, o_desk.o_room.seatlist[i].playerid);
|
||||
}
|
||||
}
|
||||
}
|
||||
//加倍
|
||||
cls_doudizhu_send.more= function(o_desk,o_aset,seat){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "more";
|
||||
msg.data={
|
||||
playerlist : o_aset.playerlist,
|
||||
bei : o_aset.bei,
|
||||
seat : seat
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toother(msg, -1);
|
||||
//发包后调用
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
o_desk.debug.save_sendpack(msg, i, o_desk.o_room.seatlist[i].playerid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//踢出房间
|
||||
cls_doudizhu_send.tichu = function(o_room,seat,type){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "tichu";
|
||||
msg.data={
|
||||
type : type
|
||||
};
|
||||
o_room.method.sendpack_toseat(msg, seat);
|
||||
}
|
||||
//
|
||||
//托管
|
||||
cls_doudizhu_send.help_play = function(o_desk,o_aset,seat){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "help_play";
|
||||
msg.data={
|
||||
tuoguan : o_desk.data.tuoguan
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toother(msg, -1);
|
||||
//发包后调用
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
o_desk.debug.save_sendpack(msg, i, o_desk.o_room.seatlist[i].playerid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//出牌
|
||||
cls_doudizhu_send.playcards = function(o_desk,o_aset,result,seat){
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "playcards";
|
||||
msg.data={
|
||||
stage : o_aset.stage,
|
||||
jieguo : result,
|
||||
seat : seat,
|
||||
cardtype : o_aset.cardtype,
|
||||
control : o_aset.control,
|
||||
dealid : o_aset.dealid,
|
||||
playerlist : o_aset.playerlist,
|
||||
rest : o_aset.rest,
|
||||
maxplayer : o_aset.maxplayer,
|
||||
hand_cards : o_aset.hand_cards[i],
|
||||
point_cards : o_aset.point_cards[i],
|
||||
bei : o_aset.bei,
|
||||
caozuo : o_aset.caozuo,
|
||||
winner : o_aset.winner,
|
||||
team_cards : o_aset.team_cards,
|
||||
end : o_aset.end,
|
||||
chuntian : o_aset.chuntian
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toseat(msg, i);
|
||||
//发包后调用
|
||||
o_desk.debug.save_sendpack(msg, seat, o_desk.o_room.seatlist[seat].playerid);
|
||||
}
|
||||
}
|
||||
}
|
||||
//不出
|
||||
cls_doudizhu_send.display = function(o_desk,o_aset,seat){
|
||||
clearTimeout(o_desk.timer.zidong[seat]);
|
||||
clearTimeout(o_desk.timer.own[seat]);
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "display";
|
||||
msg.data={
|
||||
stage : o_aset.stage,
|
||||
seat:seat,
|
||||
playerlist : o_aset.playerlist,
|
||||
caozuo : o_aset.caozuo,
|
||||
dealid : o_aset.dealid,
|
||||
control : o_aset.control,
|
||||
maxplayer : o_aset.maxplayer,
|
||||
cardtype : o_aset.cardtype,
|
||||
point_cards : o_aset.point_cards[i]
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toseat(msg, i);
|
||||
}
|
||||
}
|
||||
//发包后调用
|
||||
o_desk.debug.save_sendpack(msg, seat, o_desk.o_room.seatlist[seat].playerid);
|
||||
}
|
||||
//小局
|
||||
cls_doudizhu_send.aset = function(o_desk,o_aset,shijian){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "aset";
|
||||
msg.data={
|
||||
bj_score : o_aset.bj_score,
|
||||
rest_cards : o_aset.hand_cards,
|
||||
grade : o_desk.data.grade,
|
||||
winner : o_aset.winner,
|
||||
end : o_aset.end,
|
||||
stage : o_aset.stage,
|
||||
gold_score : o_desk.data.gold_score,
|
||||
gold : o_desk.data.gold,
|
||||
shijian : shijian,
|
||||
mp_zt : o_desk.data.mp_zt,
|
||||
chuntian : o_aset.chuntian
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toother(msg, -1);
|
||||
//发包后调用
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
o_desk.debug.save_sendpack(msg, i, o_desk.o_room.seatlist[i].playerid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//准备
|
||||
cls_doudizhu_send.ready = function(o_desk,o_aset,seat){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "ready";
|
||||
msg.data={
|
||||
playerlist: o_aset.playerlist,
|
||||
seat : seat,
|
||||
mp_zt : o_desk.data.mp_zt
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toother(msg, -1);
|
||||
//发包后调用
|
||||
o_desk.debug.save_sendpack(msg, seat, o_desk.o_room.seatlist[seat].playerid);
|
||||
}
|
||||
//准备
|
||||
cls_doudizhu_send.gold_zb = function(o_desk,o_aset,seat){
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "gold_zb";
|
||||
msg.data = {};
|
||||
msg.data={
|
||||
zbwj : o_desk.data.zbwj,
|
||||
mp_zt: o_desk.data.mp_zt,
|
||||
seat : seat
|
||||
}
|
||||
o_desk.o_room.method.sendpack_toseat(msg,seat);
|
||||
//发包后调用
|
||||
o_desk.debug.save_sendpack(msg, seat, o_desk.o_room.seatlist[seat].playerid);
|
||||
}
|
||||
//准备
|
||||
cls_doudizhu_send.mingpai = function(o_desk,o_aset,seat){
|
||||
var msg={};
|
||||
msg.app = "youle";
|
||||
msg.route = "doudizhu";
|
||||
msg.rpc = "mingpai";
|
||||
msg.data={
|
||||
team_cards: o_aset.team_cards,
|
||||
seat : seat,
|
||||
bei : o_aset.bei,
|
||||
mp_zt : o_desk.data.mp_zt
|
||||
};
|
||||
o_desk.o_room.method.sendpack_toother(msg, -1);
|
||||
//发包后调用
|
||||
o_desk.debug.save_sendpack(msg, seat, o_desk.o_room.seatlist[seat].playerid);
|
||||
}
|
||||
799
codes/games/server/games/Guanpai/arithmetic.js
Normal file
799
codes/games/server/games/Guanpai/arithmetic.js
Normal file
@@ -0,0 +1,799 @@
|
||||
var cls_guanpai_suanfa = cls_guanpai_suanfa ||{
|
||||
dapai_guanpai :function(pai , paixing , len, paisuanfa , da_paisuanfa , people){
|
||||
var put = false;
|
||||
if (paixing[0] == 1&& paixing[1] == 1) {//单牌
|
||||
if(pai.length==1){
|
||||
put =true;
|
||||
}else{
|
||||
put = false;
|
||||
}
|
||||
}
|
||||
else if (paixing[0] == 2 &&paixing[1] ==1) {//对子
|
||||
if (pai.length ==2) {
|
||||
put =true;
|
||||
}else{
|
||||
put = false;
|
||||
}
|
||||
}
|
||||
else if (paixing[0] == 1 &&paixing[1] >=5) {//顺子
|
||||
if (pai.length == paixing[1] && da_paisuanfa != 15) {
|
||||
put =true;
|
||||
}else{
|
||||
put = false;
|
||||
}
|
||||
}
|
||||
else if (paixing[0] == 2 && paixing[1] >=2) {//连对
|
||||
if (pai.length == paixing[0]*paixing[1] && da_paisuanfa != 15) {
|
||||
put =true;
|
||||
}else{
|
||||
put = false;
|
||||
}
|
||||
}
|
||||
else if (paixing[0] == 3 && paixing[1] ==1) {//3带
|
||||
if (pai.length == 5 ) {//如果是5张
|
||||
put = true;
|
||||
}else if (pai.length == 3) {
|
||||
put = true;
|
||||
if (paisuanfa ==14 && people == 2) {
|
||||
paixing = [4,1];
|
||||
}
|
||||
if (paisuanfa ==15 && people == 3) {
|
||||
paixing = [4,1];
|
||||
}
|
||||
} else {
|
||||
if (pai.length == 4 && len ==0) {//但是如果是最后一手牌,可以出
|
||||
put =true;
|
||||
}else{
|
||||
put = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if (paixing[0] == 3 && paixing[1] >=2) {//飞机
|
||||
if ((pai.length == paixing[0]*paixing[1] || pai.length == 5*paixing[1]) && da_paisuanfa != 15) {
|
||||
put =true;
|
||||
}else{
|
||||
if( pai.length >= paixing[0]*paixing[1] && pai.length <= 5*paixing[1] && len == 0 && da_paisuanfa != 15){
|
||||
put = true;
|
||||
}else{
|
||||
if (pai.length == 10 && paixing[1] == 3) {
|
||||
paixing[1] = 2;
|
||||
put = true;
|
||||
}else{
|
||||
put = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (paixing[0] == 4 && paixing[1] == 1) {//炸弹
|
||||
if (pai.length == 4) {
|
||||
if (paisuanfa ==14 && people == 2) {//2人场 4个A
|
||||
if (len == 0){//如果是最后一手 可以出3带1
|
||||
paixing = [3,1];
|
||||
put = true;
|
||||
}else{
|
||||
put =false;
|
||||
}
|
||||
}
|
||||
else if (paisuanfa ==15 && people == 3) {//3人场 4个2
|
||||
if (len == 0){//如果是最后一手 可以出3带1
|
||||
paixing = [3,1];
|
||||
put = true;
|
||||
}else{
|
||||
put =false;
|
||||
}
|
||||
}else {
|
||||
put =true;
|
||||
}
|
||||
}else{
|
||||
if( pai.length == 5){
|
||||
put = true;
|
||||
paixing = [3,1];
|
||||
}
|
||||
else{
|
||||
put = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return [put,paixing];
|
||||
},
|
||||
control_guanpai : function (people,control_d) {
|
||||
switch(people){
|
||||
case 2:
|
||||
if (control_d==0) {
|
||||
control_d = 1;
|
||||
}else{
|
||||
control_d = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (control_d!=2) {
|
||||
control_d = control_d +1;
|
||||
}else{
|
||||
control_d = 0;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (control_d!=3) {
|
||||
control_d = control_d +1;
|
||||
}else{
|
||||
control_d = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return control_d;
|
||||
},
|
||||
jiesuan_guanpai : function (o_room , agentid) {
|
||||
var o_desk = o_room.o_desk;
|
||||
var paiju = o_desk.method.CurrAset();
|
||||
paiju.tuoguan =[0,0,0];
|
||||
paiju.zhuangtai = 2;
|
||||
paiju.benju = 1;
|
||||
//关闭定时器
|
||||
clearTimeout(o_room.o_desk.timer.zc_dapai);
|
||||
clearTimeout(o_room.o_desk.timer.dapai);
|
||||
var zhang = 0;
|
||||
if (o_desk.data.people == 3) {
|
||||
zhang = 17;
|
||||
}else{
|
||||
zhang = 17;
|
||||
}
|
||||
paiju.chuntian[paiju.shengli] = 0;
|
||||
//关牌算分
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
if (paiju.chuntian[i] == 1) {//剩全部 春天
|
||||
paiju.xiaojufen[i] = paiju.xiaojufen[i] - zhang * o_desk.data.difen *2;
|
||||
paiju.xiaojufen[paiju.shengli] = paiju.xiaojufen[paiju.shengli] + zhang * o_desk.data.difen*2;
|
||||
}else if(paiju.pai[i].length >1){//剩几张 扣几分
|
||||
paiju.xiaojufen[i] = paiju.xiaojufen[i] - paiju.pai[i].length * o_desk.data.difen;
|
||||
paiju.xiaojufen[paiju.shengli] = paiju.xiaojufen[paiju.shengli] + paiju.pai[i].length * o_desk.data.difen;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
o_desk.data.grade[i] = o_desk.data.grade[i] + paiju.xiaojufen[i];
|
||||
paiju.xiaojufen[i] = paiju.xiaojufen[i] + paiju.zha[i];
|
||||
}
|
||||
|
||||
var xxs = 0;
|
||||
if (o_desk.o_room.infinite) {//无限局
|
||||
xxs = this.xingxing_guanpai(o_room);
|
||||
}else{
|
||||
o_desk.data.quanbufen.push(paiju.xiaojufen);
|
||||
}
|
||||
|
||||
var pai = [];
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
pai[i] = cls_guanpai_aset.CardsToCardIds(cls_guanpai_aset.GetDealCardsBySeat(paiju,i));//获取开局牌并转成id
|
||||
}
|
||||
var huifangpaiju = {};
|
||||
huifangpaiju.putpai = o_desk.data.putpai;//出牌情况 显示打的牌 牌型 剩余牌 总分 出牌人
|
||||
huifangpaiju.kaijufen = paiju.kaijufen;//开场时牌局的分数
|
||||
huifangpaiju.pai = pai;//开局牌
|
||||
huifangpaiju.zhuang = paiju.zhuang;//开局的控制权
|
||||
huifangpaiju.shengli = paiju.shengli;//胜利的人
|
||||
huifangpaiju.chuntian = paiju.chuntian;//春天情况
|
||||
huifangpaiju.carlen = paiju.carlen;//剩几张牌
|
||||
huifangpaiju.xiaojufen = paiju.xiaojufen;//本局得分
|
||||
huifangpaiju.grade = o_desk.data.grade;//最后得分
|
||||
huifangpaiju.jushu = paiju.jushu;//局数
|
||||
huifangpaiju.laizi = paiju.laizi;//癞子
|
||||
huifangpaiju.zha = paiju.zha;//炸
|
||||
o_desk.data.huifang.push(huifangpaiju);
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
o_desk.data.zhanji.push(paiju.xiaojufen[i]);
|
||||
}
|
||||
//扣除房卡
|
||||
mod_guanpai.import.deduct_roomcard(o_room);
|
||||
//o_room: 房间对象,arr_grade: 对应座位的玩家该局输赢分数数组(例如:[2,3,4,null,null]),nowCount:当前局数
|
||||
mod_guanpai.app.youle_room.export.save_grade_aset(o_room, paiju.xiaojufen, o_desk.data.ju);
|
||||
|
||||
if (o_room.o_desk.data.asetlist.length == o_room.asetcount) {
|
||||
paiju.zhuangtai = 3;
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = "daju";
|
||||
msg.data = {};
|
||||
msg.data.shengli = paiju.shengli;
|
||||
msg.data.xiaojufen = paiju.xiaojufen;
|
||||
msg.data.suoyoupai = paiju.pai;
|
||||
msg.data.zha = paiju.zha;
|
||||
msg.data.xs_dapai = paiju.xs_dapai;
|
||||
msg.data.seat = paiju.seat;
|
||||
msg.data.paixing = paiju.paixing;
|
||||
msg.data.grade = o_desk.data.grade;
|
||||
msg.data.quanbufen = o_desk.data.quanbufen;
|
||||
msg.data.zhuangtai = paiju.zhuangtai;
|
||||
msg.data.chuntian = paiju.chuntian;
|
||||
msg.data.difen = o_desk.data.difen;
|
||||
msg.data.people = o_desk.data.people;
|
||||
msg.data.laizi_dapai = paiju.laizi_dapai;
|
||||
msg.data.laizi_bian = paiju.laizi_bian;
|
||||
msg.data.carlen = paiju.carlen;
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
//保存发包
|
||||
o_desk.debug.save_sendpack(msg,-1,-3);
|
||||
o_desk.debug.save_pack_curraset();
|
||||
//完成任务
|
||||
for(var i=0;i<o_desk.data.people;i++){
|
||||
mod_guanpai.import.finish_gametask(agentid, o_room.seatlist[i], '1iyuKXRouftbkpghjabeZ7O0LMgsG7v8', 1);
|
||||
}
|
||||
|
||||
//保存战绩
|
||||
var xinxi = [];
|
||||
var fens = [];
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
var wanjia = {};
|
||||
wanjia = o_room.seatlist[i];
|
||||
xinxi[i] = [];
|
||||
xinxi[i].push(wanjia.nickname);//玩家昵称
|
||||
xinxi[i].push(o_desk.data.grade[i]);//玩家大局结算总分
|
||||
xinxi[i].push(wanjia.avatar);//玩家头像
|
||||
}
|
||||
for (var i = 0; i < o_room.asetcount; i++) {
|
||||
//获得每局每个人的得分
|
||||
fens[i] = [];
|
||||
for (var j = 0; j < o_desk.data.people; j++) {
|
||||
fens[i].push([j,o_desk.data.zhanji[i*o_desk.data.people+j]]);
|
||||
}
|
||||
|
||||
}
|
||||
var myname = [];
|
||||
for (var i = 0; i < xinxi.length; i++) {
|
||||
myname[i] = [];
|
||||
myname[i][0] = xinxi[i][0];
|
||||
myname[i][1] = xinxi[i][2];
|
||||
}
|
||||
var gameinfo1 = {};
|
||||
gameinfo1.round = fens;
|
||||
gameinfo1.playerlist = xinxi;
|
||||
gameinfo1.roundsum = o_room.asetcount;
|
||||
|
||||
var gameinfo2 = {};
|
||||
gameinfo2.huifang = o_desk.data.huifang;//各个小局情况
|
||||
gameinfo2.xinxi = myname;//昵称头像
|
||||
gameinfo2.roomcode = o_room.roomcode;//房间号
|
||||
gameinfo2.leixing = paiju.leixing;//房间类型
|
||||
gameinfo2.playerid = o_desk.data.playerid;//id
|
||||
gameinfo2.difen = o_desk.data.difen;//底分
|
||||
gameinfo2.zha = o_desk.data.zha;//炸
|
||||
|
||||
mod_guanpai.import.save_grade(o_room, gameinfo1, gameinfo2, 1);
|
||||
|
||||
}else if(o_room.o_desk.data.asetlist.length < o_room.asetcount){
|
||||
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = "xiaoju";
|
||||
msg.data = {};
|
||||
msg.data.shengli = paiju.shengli;
|
||||
msg.data.xiaojufen = paiju.xiaojufen;
|
||||
msg.data.grade = o_desk.data.grade;
|
||||
msg.data.suoyoupai = paiju.pai;
|
||||
msg.data.zha = paiju.zha;
|
||||
msg.data.xs_dapai = paiju.xs_dapai;
|
||||
msg.data.seat = paiju.seat;
|
||||
msg.data.paixing = paiju.paixing;
|
||||
msg.data.zhuangtai = paiju.zhuangtai;
|
||||
msg.data.chuntian = paiju.chuntian;
|
||||
msg.data.difen = o_desk.data.difen;
|
||||
msg.data.people = o_desk.data.people;
|
||||
msg.data.carlen = paiju.carlen;
|
||||
msg.data.laizi_dapai = paiju.laizi_dapai;
|
||||
msg.data.laizi_bian = paiju.laizi_bian;
|
||||
msg.data.xxs = xxs;
|
||||
//保存发包
|
||||
o_desk.debug.save_sendpack(msg,-1,-2);
|
||||
o_desk.debug.save_pack_curraset();
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
if (o_desk.o_room.infinite) {//无限局
|
||||
this.chushihua_guanpai(o_room);
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
bipai_guanpai : function (paixing , da_paixing , pai , da_pai , paishu , zuidapaishu , shengpai , benshoulai,lai , renshu) {
|
||||
if (paixing[0][0] == da_paixing[0][0] && paixing[0][1] == da_paixing[0][1]) {//牌型相同
|
||||
var qian = 0;
|
||||
var hou = 0;
|
||||
if(paixing[0][0] >= 4){//如果都是炸
|
||||
if (benshoulai[1] == 1 && benshoulai[0] == 0) {//如果自己是癞子 上家不是癞子
|
||||
return false;
|
||||
}else if (benshoulai[1] == 0 && benshoulai[0] == 1) {//如果自己不是癞子 上家是癞子
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
if (pai>da_pai) {//如果第一张牌大于最大牌
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (paixing[0][0] !=3) {
|
||||
if (pai>da_pai) {//如果第一张牌大于最大牌
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}else if(paixing[0][0] == 3){//如果是三带
|
||||
if (zuidapaishu == paishu) {//如果牌数相同
|
||||
if (pai>da_pai) {//如果第一张牌大于最大牌
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}else{//如果牌数不同
|
||||
if(paishu<zuidapaishu && shengpai == 0){
|
||||
if (pai>da_pai) {//如果第一张牌大于最大牌
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if(paixing[0][0] == 4){//现在出的牌如果是炸
|
||||
if ((paishu == 4 && pai != 15 && pai != 14) || paishu == 3) {
|
||||
return true;
|
||||
}else{
|
||||
if (paishu == 4 && renshu == 3) {
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
},
|
||||
tishi_guanpai : function(o_room,seat,benshoulai,y_l){
|
||||
var paiju = o_room.o_desk.method.CurrAset();
|
||||
var zuixiaopai = paiju.paixing[1][0][4]+1;
|
||||
var zuidapai = null;
|
||||
var o_desk = o_room.o_desk;
|
||||
var tishipai = [];
|
||||
var kexuanpai = [];
|
||||
if (paiju.paixing) {
|
||||
if (paiju.zuidapai.length>4 && paiju.paixing[0][0] == 4) {//如果不是炸
|
||||
zuixiaopai = null;
|
||||
}
|
||||
else if (paiju.zuidapai.length == 4 && paiju.paixing[0][0] == 4 ) {//如果是炸
|
||||
if (o_desk.data.people == 2) {
|
||||
zuidapai = 13;
|
||||
}else{
|
||||
zuidapai = 14;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((paiju.paixing[0][0] == 1 && paiju.paixing[0][1]>=5) || (paiju.paixing[0][0] == 2 && paiju.paixing[0][1]>=2) || (paiju.paixing[0][0] == 3 && paiju.paixing[0][1]>=2)) {
|
||||
zuidapai = 14;
|
||||
}
|
||||
if (y_l && paiju.paixing[0][0] == 4 && benshoulai[0] == 1) {
|
||||
//下一家可以出的牌 牌
|
||||
kexuanpai = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[4,1], [0,0,1,1], null ,zuidapai);
|
||||
|
||||
if (kexuanpai.length != 0) {
|
||||
//如果是炸
|
||||
if (cls_guanpai_card.GetMaxCardTypeByCardList(kexuanpai[0] , 0)[0][0] == 4 ||
|
||||
(cls_guanpai_card.GetMaxCardTypeByCardList(kexuanpai[0] , 0)[0][0] == 3 && o_desk.data.people<4 && cls_guanpai_card.GetNumber(kexuanpai[0][0]) == 14)) {
|
||||
if (paiju.zuidapai.length>4 && paiju.paixing[0][0] == 4) {
|
||||
if (kexuanpai[kexuanpai.length-1][0][4]>paiju.paixing[1][0][4]) {//如果炸比4带2大,可以出所有的牌
|
||||
paiju.sandai = 1;
|
||||
//加入手上剩余的牌
|
||||
kexuanpai.push(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[1,1]));
|
||||
}
|
||||
}
|
||||
}//如果是三带
|
||||
else if (cls_guanpai_card.GetMaxCardTypeByCardList(kexuanpai[0] , 0)[0][0] == 3 && paiju.paixing[0][0] == 3) {//如果是三带类型的 则所有的牌都能出
|
||||
|
||||
paiju.sandai = 1;
|
||||
//加入手上剩余的牌
|
||||
kexuanpai.push(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[1,1]));
|
||||
|
||||
}
|
||||
}
|
||||
//提示牌 牌
|
||||
tishipai = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[4,1], [0,0,0,0], null ,zuidapai);
|
||||
|
||||
}
|
||||
else if (paiju.paixing[0][0] != 4 || y_l != 0 || (benshoulai[0] == 1 && paiju.paixing[0][0] == 4) ) {
|
||||
//下一家可以出的牌 牌
|
||||
var kexuanpai = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
paiju.paixing[0], [0,0,1,1], zuixiaopai ,zuidapai);
|
||||
|
||||
if (kexuanpai.length != 0) {
|
||||
//如果是炸
|
||||
if (cls_guanpai_card.GetMaxCardTypeByCardList(kexuanpai[0] , 0)[0][0] == 4 ||
|
||||
(cls_guanpai_card.GetMaxCardTypeByCardList(kexuanpai[0] , 0)[0][0] == 3 && o_desk.data.people<4 && cls_guanpai_card.GetNumber(kexuanpai[0][0]) == 14)) {
|
||||
if (paiju.zuidapai.length>4 && paiju.paixing[0][0] == 4) {
|
||||
if (kexuanpai[kexuanpai.length-1][0][4]>paiju.paixing[1][0][4]) {//如果炸比4带2大,可以出所有的牌
|
||||
paiju.sandai = 1;
|
||||
//加入手上剩余的牌
|
||||
kexuanpai.push(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[1,1]));
|
||||
}
|
||||
}
|
||||
}//如果是三带
|
||||
else if (cls_guanpai_card.GetMaxCardTypeByCardList(kexuanpai[0] , 0)[0][0] == 3 && paiju.paixing[0][0] == 3) {//如果是三带类型的 则所有的牌都能出
|
||||
|
||||
paiju.sandai = 1;
|
||||
//加入手上剩余的牌
|
||||
kexuanpai.push(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[1,1]));
|
||||
|
||||
}
|
||||
}
|
||||
//提示牌 牌
|
||||
tishipai = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
paiju.paixing[0], [0,0,0,0], zuixiaopai ,zuidapai);
|
||||
|
||||
}
|
||||
|
||||
if (y_l) {
|
||||
//如果自己打的不是炸
|
||||
if (paiju.paixing[0][0] != 4) {
|
||||
var tishizha = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[4,1], [0,0,1,0], null,zuidapai);
|
||||
for (var i = 0; i < tishizha.length; i++) {
|
||||
for (var j = 0; j < tishizha[i].length; j++) {
|
||||
for (var l = 0; l < tishipai.length; l++) {
|
||||
for (var o = 0; o < tishipai[l].length; o++) {
|
||||
if (tishipai[l][o] == tishizha[i][j]) {
|
||||
tishipai.splice(l,1);
|
||||
l = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < tishizha.length; i++) {
|
||||
tishipai.push(tishizha[i]);
|
||||
kexuanpai.push(tishizha[i]);
|
||||
}
|
||||
}
|
||||
if (o_desk.data.people == 2 && (paiju.paixing[1].length != 3 || paiju.paixing[0][0] == 4) ) {//加入3个A
|
||||
var a_zha = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,1], [0,0,1,0], 14 ,14);
|
||||
for (var i = 0; i < a_zha.length; i++) {
|
||||
for (var j = 0; j < a_zha[i].length; j++) {
|
||||
for (var l = 0; l < tishipai.length; l++) {
|
||||
for (var o = 0; o < tishipai[l].length; o++) {
|
||||
if (tishipai[l][o] == a_zha[i][j]) {
|
||||
tishipai.splice(l,1);
|
||||
l = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (a_zha.length>0) {
|
||||
kexuanpai.push(a_zha[0]);
|
||||
tishipai.push(a_zha[0]);
|
||||
}
|
||||
}
|
||||
if (o_desk.data.people == 3 && (paiju.paixing[1].length != 3 || paiju.paixing[0][0] == 4) ) {//加入3个2
|
||||
var a_zha = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,1], [0,0,1,0], 15 ,15);
|
||||
for (var i = 0; i < a_zha.length; i++) {
|
||||
for (var j = 0; j < a_zha[i].length; j++) {
|
||||
for (var l = 0; l < tishipai.length; l++) {
|
||||
for (var o = 0; o < tishipai[l].length; o++) {
|
||||
if (tishipai[l][o] == a_zha[i][j]) {
|
||||
tishipai.splice(l,1);
|
||||
l = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (a_zha.length>0) {
|
||||
kexuanpai.push(a_zha[0]);
|
||||
tishipai.push(a_zha[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var tishi= null;
|
||||
if (kexuanpai.length>0) {
|
||||
tishi=[kexuanpai,tishipai];
|
||||
}
|
||||
return tishi;
|
||||
},
|
||||
zhadan_guanpai : function(o_room,laizishu,laizi){
|
||||
var paiju = o_room.o_desk.method.CurrAset();
|
||||
var o_desk = o_room.o_desk;
|
||||
var tishipai = null;
|
||||
var zuixiaopai = 0;
|
||||
var zuidapai = null;
|
||||
if (o_desk.data.people == 2) {
|
||||
zuidapai = 13;
|
||||
}else{
|
||||
zuidapai = 14;
|
||||
}
|
||||
if (paiju.paixing) {
|
||||
if (paiju.paixing[0][0] == 4 && paiju.paixing[0][1] == 1 &&paiju.zuidapai.length <= 4) {
|
||||
zuixiaopai = paiju.paixing[1][0][4]+1;
|
||||
}
|
||||
}
|
||||
// if ((paiju.paixing[0][0] == 1 && paiju.paixing[0][1]>=5) || (paiju.paixing[0][0] == 2 && paiju.paixing[0][1]>=2) || (paiju.paixing[0][0] == 3 && paiju.paixing[0][1]>=2)) {
|
||||
// zuidapai = 14;
|
||||
// }
|
||||
if (laizishu >= 1) {
|
||||
//提示牌 牌
|
||||
tishipai = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,1], [0,0,1,0], zuixiaopai ,zuidapai);
|
||||
for (var l = 0; l < tishipai.length; l++) {
|
||||
tishipai[l] = cls_guanpai_aset.CardsToCardIds(tishipai[l]);
|
||||
if ((tishipai[l][0]+1)%13 == paiju.laizi%13) {
|
||||
tishipai.splice(l,1);
|
||||
l--;
|
||||
}else{
|
||||
tishipai[l].push(laizi[0]);
|
||||
}
|
||||
}
|
||||
if (o_desk.data.people == 2 && (paiju.zuidapai.length != 3 || paiju.paixing[0][0] != 4)) {//加入3个A
|
||||
var a_zha = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[2,1], [0,0,1,0], 14 ,14);
|
||||
|
||||
if (a_zha.length>0) {
|
||||
a_zha[0] = cls_guanpai_aset.CardsToCardIds(a_zha[0]);
|
||||
a_zha[0].push(laizi[0]);
|
||||
tishipai.push(a_zha[0]);
|
||||
}
|
||||
}
|
||||
|
||||
if (o_desk.data.people == 3 && (paiju.zuidapai.length != 3 || paiju.paixing[0][0] != 4) ) {//加入3个2
|
||||
var a_zha = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[2,1], [0,0,1,0], 15 ,15);
|
||||
|
||||
if (a_zha.length>0) {
|
||||
a_zha[0] = cls_guanpai_aset.CardsToCardIds(a_zha[0]);
|
||||
a_zha[0].push(laizi[0]);
|
||||
tishipai.push(a_zha[0]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if(laizishu>=2){
|
||||
//提示牌 牌
|
||||
var ti = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[2,1], [0,0,1,0], zuixiaopai ,zuidapai);
|
||||
for (var l = 0; l < ti.length; l++) {
|
||||
ti[l] = cls_guanpai_aset.CardsToCardIds(ti[l]);
|
||||
if ((ti[l][0]+1)%13 == paiju.laizi%13) {
|
||||
ti.splice(l,1);
|
||||
l--;
|
||||
}else{
|
||||
for (var i = 0; i < 2; i++) {
|
||||
ti[l].push(laizi[i]);
|
||||
}
|
||||
tishipai.push(ti[l]);
|
||||
}
|
||||
}
|
||||
if (zuixiaopai < 14 ) {
|
||||
if (o_desk.data.people == 2 && (paiju.zuidapai.length != 3 || paiju.paixing[0][0] != 4) ) {//加入3个A
|
||||
var a_zha = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[1,1], [0,0,1,0], 14 ,14);
|
||||
|
||||
if (a_zha.length>0) {
|
||||
a_zha[0] = cls_guanpai_aset.CardsToCardIds(a_zha[0]);
|
||||
for (var i = 0; i < 2; i++) {
|
||||
a_zha[0].push(laizi[i]);
|
||||
}
|
||||
tishipai.push(a_zha[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (zuixiaopai < 15 ) {
|
||||
if (o_desk.data.people == 3 && (paiju.zuidapai.length != 3 || paiju.paixing[0][0] != 4) ) {//加入3个2
|
||||
var a_zha = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[1,1], [0,0,1,0], 15 ,15);
|
||||
|
||||
if (a_zha.length>0) {
|
||||
a_zha[0] = cls_guanpai_aset.CardsToCardIds(a_zha[0]);
|
||||
for (var i = 0; i < 2; i++) {
|
||||
a_zha[0].push(laizi[i]);
|
||||
}
|
||||
tishipai.push(a_zha[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if(laizishu>=3){
|
||||
|
||||
//提示牌 牌
|
||||
var tishi = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[1,1], [0,0,1,0], zuixiaopai ,zuidapai);
|
||||
for (var l = 0; l < tishi.length; l++) {
|
||||
tishi[l] = cls_guanpai_aset.CardsToCardIds(tishi[l]);
|
||||
if ((tishi[l][0]+1)%13 == paiju.laizi%13) {
|
||||
tishi.splice(l,1);
|
||||
l--;
|
||||
}else{
|
||||
for (var i = 0; i < 3; i++) {
|
||||
tishi[l].push(laizi[i]);
|
||||
}
|
||||
tishipai.push(tishi[l]);
|
||||
}
|
||||
}
|
||||
if (laizishu == 4 && zuixiaopai < paiju.laizi && (paiju.zuidapai.length != 3 || paiju.paixing[0][0] != 4) ) {
|
||||
var sigelaizi = [];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
sigelaizi.push(laizi[i]);
|
||||
}
|
||||
tishipai.push(sigelaizi);
|
||||
}
|
||||
}
|
||||
// tishipai.push(laizi);
|
||||
return tishipai;
|
||||
},
|
||||
xingxing_guanpai : function(o_room){
|
||||
var paiju = o_room.o_desk.method.CurrAset();
|
||||
var o_desk = o_room.o_desk;
|
||||
var jiafen = 0;
|
||||
var xingxingfen = [];//实际扣除的星星数
|
||||
var jiesan = [];
|
||||
|
||||
for (var j = 0; j < o_desk.data.people; j++) {
|
||||
xingxingfen[j] = 0;
|
||||
if (paiju.xiaojufen[j]<0) {//输分
|
||||
if (o_room.seatlist[j].bean + paiju.xiaojufen[j] * o_desk.data.beishu >0) {//星星数大于扣分
|
||||
xingxingfen[j] = paiju.xiaojufen[j] * o_desk.data.beishu;
|
||||
}else{//星星数小于扣分
|
||||
xingxingfen[j] = 0-o_room.seatlist[j].bean;
|
||||
jiesan.push(j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
for (var i = 0; i < xingxingfen.length; i++) {//一起输出多少星星
|
||||
jiafen = jiafen - xingxingfen[i];
|
||||
}
|
||||
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
if (o_room.seatlist[i].bean < o_room.roomtype[6][1]) {
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = 'xingxingbugou';
|
||||
msg.data = {};
|
||||
o_room.method.sendpack_toseat(msg, jiesan[i]);
|
||||
var tr = function(){
|
||||
//踢人
|
||||
mod_guanpai.app.youle_room.export.kickplayer_inroom(o_room, jiesan[i]);
|
||||
}
|
||||
o_room.o_desk.timer.tiren = setTimeout(tr,4000);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (paiju.xiaojufen[0] >= paiju.xiaojufen[1] && paiju.xiaojufen[0] >= paiju.xiaojufen[2]) {
|
||||
if (paiju.xiaojufen[0] * o_desk.data.beishu >= jiafen) {//赢的星星大于扣的星星数
|
||||
xingxingfen[0] = jiafen;
|
||||
}else{
|
||||
xingxingfen[0] = paiju.xiaojufen[0] * o_desk.data.beishu;
|
||||
}
|
||||
if (paiju.xiaojufen[1] > paiju.xiaojufen[2]) {//1>2
|
||||
if (paiju.xiaojufen[1]>0) {
|
||||
xingxingfen[1] = jiafen - paiju.xiaojufen[0] * o_desk.data.beishu;
|
||||
}
|
||||
}else{
|
||||
if (paiju.xiaojufen[2]>0) {
|
||||
xingxingfen[2] = jiafen - paiju.xiaojufen[0] * o_desk.data.beishu;
|
||||
}
|
||||
}
|
||||
}else if (paiju.xiaojufen[1] >= paiju.xiaojufen[0] && paiju.xiaojufen[1] >= paiju.xiaojufen[2]) {
|
||||
if (paiju.xiaojufen[1] * o_desk.data.beishu > jiafen) {//赢的星星大于扣的星星数
|
||||
xingxingfen[1] = jiafen;
|
||||
}else{
|
||||
xingxingfen[1] = paiju.xiaojufen[1] * o_desk.data.beishu;
|
||||
}
|
||||
//0>2
|
||||
if (paiju.xiaojufen[0] > paiju.xiaojufen[2]) {
|
||||
if (paiju.xiaojufen[0]>0) {
|
||||
xingxingfen[0] = jiafen - paiju.xiaojufen[1] * o_desk.data.beishu;
|
||||
}
|
||||
}else{
|
||||
if (paiju.xiaojufen[2]>0) {
|
||||
xingxingfen[2] = jiafen - paiju.xiaojufen[1] * o_desk.data.beishu;
|
||||
}
|
||||
}
|
||||
}else if (paiju.xiaojufen[2] >= paiju.xiaojufen[0] && paiju.xiaojufen[2] >= paiju.xiaojufen[1]) {
|
||||
if (paiju.xiaojufen[2] * o_desk.data.beishu > jiafen) {//赢的星星大于扣的星星数
|
||||
xingxingfen[2] = jiafen;
|
||||
}else{
|
||||
xingxingfen[2] = paiju.xiaojufen[2] * o_desk.data.beishu;
|
||||
}
|
||||
//0>1
|
||||
if (paiju.xiaojufen[0] > paiju.xiaojufen[1]) {
|
||||
if (paiju.xiaojufen[0]>0) {
|
||||
xingxingfen[0] = jiafen - paiju.xiaojufen[2] * o_desk.data.beishu;
|
||||
}
|
||||
}else{
|
||||
if (paiju.xiaojufen[1]>0) {
|
||||
xingxingfen[1] = jiafen - paiju.xiaojufen[2] * o_desk.data.beishu;
|
||||
}
|
||||
}
|
||||
}
|
||||
var xxs = [];
|
||||
for(var i = 0 ; i<o_desk.data.people;i++){
|
||||
xxs[i] = o_room.seatlist[i].bean;
|
||||
}
|
||||
//o_room: 房间对象,arr_grade: 对应座位的玩家该局输赢分数数组(例如:[2,3,4,null,null]),nowCount:当前局数
|
||||
var chashui = mod_guanpai.app.youle_room.export.save_grade_aset(o_room, xingxingfen, o_desk.data.ju);
|
||||
|
||||
for (var i = 0; i < chashui.length; i++) {
|
||||
xxs[i] = xxs[i]+chashui[i];
|
||||
}
|
||||
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]){
|
||||
o_room.seatlist[i].gameinfo.isbet = 0;
|
||||
o_desk.data.zhunbei[i] = 1;
|
||||
o_room.seatlist[i].gameinfo.isprepare = 0;
|
||||
|
||||
}
|
||||
}
|
||||
return xxs;
|
||||
},
|
||||
chushihua_guanpai : function(o_room){
|
||||
var o_desk = o_room.o_desk;
|
||||
o_desk.data.grade = [];
|
||||
o_desk.data.quanbufen = [];//
|
||||
o_desk.data.huifang = [];//回放汇总
|
||||
o_desk.data.putpai = [];//出牌情况
|
||||
o_desk.data.zhanji = [];//战绩分
|
||||
o_desk.data.playerid = [];
|
||||
o_desk.data.zhunbei = [1,1,1];//准备阶段
|
||||
o_desk.data.laizi = 0;
|
||||
switch(o_room.roomtype[3]){//模式
|
||||
case 1:
|
||||
o_desk.data.laizi = 0;
|
||||
break;
|
||||
case 2:
|
||||
o_desk.data.laizi = 1;
|
||||
break;
|
||||
}
|
||||
o_desk.method_flow = null;
|
||||
o_desk.timer.fapai = 0;
|
||||
o_desk.timer.dapai = 0;
|
||||
o_desk.timer.buyao = 0;
|
||||
o_desk.timer.flow = 0;
|
||||
o_desk.timer.tiren = 0;
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
o_desk.data.grade.push(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
350
codes/games/server/games/Guanpai/class.export.js
Normal file
350
codes/games/server/games/Guanpai/class.export.js
Normal file
@@ -0,0 +1,350 @@
|
||||
///////////////////////////////////////////////////
|
||||
/////// cls_mod_demo_export: 输出接口 ///////
|
||||
///////////////////////////////////////////////////
|
||||
var cls_mod_guanpai_export = cls_mod_guanpai_export || {
|
||||
|
||||
new: function() {
|
||||
|
||||
var exp = {};
|
||||
|
||||
//创建房间时需要的房卡数量
|
||||
exp.get_needroomcard = function(roomtype,card){
|
||||
if (card.buckle[0] != 0) {//如果是房主扣卡
|
||||
switch (roomtype[0])
|
||||
{
|
||||
case 1:
|
||||
return card.buckle[0];//房主扣卡数
|
||||
break;
|
||||
case 2:
|
||||
return card.buckle[1];
|
||||
break;
|
||||
case 3:
|
||||
return card.buckle[2];
|
||||
break;
|
||||
default:
|
||||
return card.buckle[0];
|
||||
break;
|
||||
}
|
||||
} else {//如果是个人扣卡
|
||||
switch (roomtype[0])
|
||||
{
|
||||
case 1:
|
||||
return card.personal[0];//房主扣卡数
|
||||
break;
|
||||
case 2:
|
||||
return card.personal[1];
|
||||
break;
|
||||
case 3:
|
||||
return card.personal[2];
|
||||
break;
|
||||
default:
|
||||
return card.personal[0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// return 0;
|
||||
}
|
||||
|
||||
//创建房间成功时返回给游戏前端的房间总局数
|
||||
exp.get_asetcount = function(roomtype,card){
|
||||
switch (roomtype[0])
|
||||
{
|
||||
case 1:
|
||||
return card.numbergames[0];//局数
|
||||
break;
|
||||
case 2:
|
||||
return card.numbergames[1];
|
||||
break;
|
||||
default:
|
||||
return card.numbergames[0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
//扣卡模式
|
||||
exp.deduct_roomcard_mode = function(o_game, roomtype){
|
||||
return 0;
|
||||
}
|
||||
//加入房间时需要的房卡数量
|
||||
exp.get_needroomcard_joinroom = function(roomtype,card){
|
||||
//个人扣卡
|
||||
switch (roomtype[0])
|
||||
{
|
||||
case 1:
|
||||
return card.personal[0];//个人扣卡数
|
||||
break;
|
||||
case 2:
|
||||
return card.personal[1];
|
||||
break;
|
||||
case 3:
|
||||
return card.personal[2];
|
||||
break;
|
||||
default:
|
||||
return card.personal[0];
|
||||
break;
|
||||
}
|
||||
// return 0;
|
||||
}
|
||||
//几人开战
|
||||
exp.makewar_playercount = function (roomtype,card) {
|
||||
switch(roomtype[1]){
|
||||
case 1:
|
||||
return card.people[0];
|
||||
break;
|
||||
case 2:
|
||||
return card.people[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//准备
|
||||
exp.createroom_needprepare = function(roomtype, game_config){
|
||||
return 1;
|
||||
}
|
||||
////恢复牌局 (根据保存的o_room 和 o_room.o_desk.data 新建一局)
|
||||
exp.restore_room= function(o_room, o_deskinfo){
|
||||
cls_desk_guanpai.new(o_room);
|
||||
o_room.o_desk.data = o_deskinfo;
|
||||
cls_desk_guanpai.flow(o_room);
|
||||
}
|
||||
exp.createroom_roommode = function(roomtype,game_config){
|
||||
return roomtype[5]-1;//是否为星星场,返回1为星星场。
|
||||
};
|
||||
exp.createroom_beanfloor = function(roomtype,game_config){ //roomtype:房间类型,game_config:游戏配置的数据
|
||||
//星星场房间的进入时最低星星数限制,无限制return null。
|
||||
if (roomtype[5] == 2) {
|
||||
return roomtype[6][1];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
//星星场房间的星星倍数值。
|
||||
exp.createroom_beanmult = function(roomtype,game_config){//roomtype:房间类型,game_config:游戏配置的数据
|
||||
if (roomtype[5] == 2) {
|
||||
return roomtype[6][0];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
//茶水费
|
||||
exp.owner_beanpush = function(roomtype){
|
||||
if (roomtype[5] == 2) {
|
||||
return roomtype[6][2];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
//准备
|
||||
exp.player_prepare = function(o_room, seat){
|
||||
//玩家准备
|
||||
if(o_room.o_desk){
|
||||
o_room.o_desk.data.zhunbei[seat] = 0;
|
||||
o_room.seatlist[seat].gameinfo.isprepare = 1;
|
||||
var kaishi = 0;
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]){
|
||||
if (o_room.o_desk.data.zhunbei[i] == 0) {
|
||||
kaishi++;
|
||||
}
|
||||
}
|
||||
}
|
||||
//全准备了
|
||||
if (kaishi == o_room.o_desk.data.people) {
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]){
|
||||
o_room.seatlist[i].gameinfo.isbet = 1;
|
||||
}
|
||||
}
|
||||
cls_desk_guanpai.flow(o_room);
|
||||
//开始流程
|
||||
o_room.o_desk.method_flow.method.startflow();
|
||||
}
|
||||
}
|
||||
};
|
||||
//是否可以准备
|
||||
exp.player_CanPrepare = function(o_room, seat){
|
||||
if(o_room.o_desk){
|
||||
//子游戏进行判断是否满足准备条件
|
||||
if(o_room.seatlist[seat].gameinfo.isprepare){
|
||||
return 0;
|
||||
}else{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
};
|
||||
exp.player_leave = function(o_room,seat){
|
||||
o_room.o_desk.data.zhunbei[seat] = 1;
|
||||
};
|
||||
//玩家在无限局是否可离开,只有准备阶段可离开,可离开返回值1,否者0
|
||||
exp.isPlayerCanLeave = function(o_room, seat){
|
||||
//玩家是否可离开
|
||||
if(o_room.seatlist[seat].gameinfo.isbet == 0){
|
||||
return 1; //可离开
|
||||
}else {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
//开战
|
||||
exp.makewar = function(o_room,card){
|
||||
cls_desk_guanpai.new(o_room,card);
|
||||
if (o_room.infinite == 1) {
|
||||
cls_desk_guanpai.flow(o_room);
|
||||
return 3;
|
||||
}else{
|
||||
|
||||
//返回前端的开战包
|
||||
var r = [];
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]){
|
||||
o_room.seatlist[i].gameinfo.isbet = 1;
|
||||
r.push("有人");
|
||||
}
|
||||
}
|
||||
var flow = function(){
|
||||
cls_desk_guanpai.flow(o_room);
|
||||
|
||||
//开始流程
|
||||
o_room.o_desk.method_flow.method.startflow();
|
||||
}
|
||||
// o_desk.data.difen = card.difen[o_room.roomtype[3]];
|
||||
|
||||
o_room.o_desk.timer.flow = setTimeout(flow,1000);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//获取某个玩家的牌桌整桌当前信息
|
||||
exp.get_deskinfo = function(o_room, seat){
|
||||
var paiju = o_room.o_desk.method.CurrAset();
|
||||
var mmp =0;
|
||||
// if (mmp ==1) {
|
||||
if (o_room.o_game.method.isdebugger()) {
|
||||
if (o_room.o_desk.data.asetlist.length>0) {
|
||||
var r = {};
|
||||
r = paiju;
|
||||
r.grade = o_room.o_desk.data.grade;
|
||||
r.people = o_room.o_desk.data.people;//几个人
|
||||
r.leixing = o_room.roomtype;
|
||||
r.difen = o_room.o_desk.data.difen;
|
||||
return r;
|
||||
}
|
||||
}else{
|
||||
var r = {};
|
||||
r.grade = o_room.o_desk.data.grade;//得分
|
||||
r.jushu = [o_room.o_desk.data.asetlist.length,o_room.asetcount];//第几局
|
||||
r.paixing = paiju.paixing;//最大的牌
|
||||
r.xs_dapai = paiju.xs_dapai;//打过的牌
|
||||
r.zhunbei = paiju.zhunbei;//准备状态
|
||||
r.shengli = paiju.shengli;//胜利的人
|
||||
r.chuntian = paiju.chuntian;//是否春天
|
||||
r.xiaojufen = paiju.xiaojufen//本局得分
|
||||
r.control = paiju.control;//控制权
|
||||
r.leixing = o_room.roomtype;;//游戏类型
|
||||
r.kexuanpai = paiju.kexuanpai;//可以选择的牌
|
||||
if (paiju.benju == 0) {
|
||||
r.pai = paiju.pai[seat];//自己的牌
|
||||
}else if (paiju.benju == 1) {
|
||||
r.pai = paiju.pai;//自己的牌
|
||||
}
|
||||
r.seat = paiju.seat;//最近一次出牌的人
|
||||
r.zha = paiju.zha;//炸
|
||||
r.seat = paiju.seat;//操作的人
|
||||
r.zhuangtai = paiju.zhuangtai;//状态
|
||||
r.carlen = paiju.carlen;//剩余几张牌
|
||||
r.people = o_room.o_desk.data.people;//几个人
|
||||
r.benju = paiju.benju;//本局是否结束
|
||||
r.laizi_dapai = paiju.laizi_dapai//正常牌
|
||||
r.laizi_bian = paiju.laizi_bian;//变成的癞子id
|
||||
r.tuoguan = paiju.tuoguan;
|
||||
if (seat == paiju.control) {
|
||||
r.zhinengchu = paiju.zhinengchu;//只有一种能出
|
||||
r.sandai = paiju.sandai;//是不是三带
|
||||
r.baodan = paiju.baodan;//报单
|
||||
r.tishipai = paiju.tishipai;//提示牌
|
||||
}
|
||||
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
//解散房间
|
||||
exp.get_disbandRoom = function(o_room){
|
||||
var o_desk = o_room.o_desk;
|
||||
var paiju = o_room.o_desk.method.CurrAset();
|
||||
//关闭定时器
|
||||
clearTimeout(o_room.o_desk.timer.dapai);
|
||||
clearTimeout(o_room.o_desk.timer.zc_dapai);
|
||||
if (paiju.benju == 0) {
|
||||
for (var i = 0; i < o_room.o_desk.data.grade.length; i++) {
|
||||
o_room.o_desk.data.grade[i] = o_room.o_desk.data.grade[i] - paiju.zha[i];
|
||||
}
|
||||
}
|
||||
var fen = [];
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = "daju";
|
||||
msg.data = {};
|
||||
msg.data.quanbufen = o_desk.data.quanbufen;
|
||||
msg.data.grade = o_room.o_desk.data.grade;
|
||||
|
||||
//保存战绩
|
||||
var xinxi = [];
|
||||
var fens = [];
|
||||
for (var i = 0; i < o_desk.data.grade.length; i++) {
|
||||
fen[i] = o_desk.data.grade[i];
|
||||
}
|
||||
if (fen.length>0) {
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
if(o_room.seatlist[i]){
|
||||
xinxi[i] = [];
|
||||
xinxi[i].push(o_room.seatlist[i].nickname);//玩家昵称
|
||||
xinxi[i].push(fen[i]);//玩家大局结算总分
|
||||
xinxi[i].push(o_room.seatlist[i].avatar);//玩家头像
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < o_desk.data.quanbufen.length; i++) {
|
||||
//获得每局每个人的得分
|
||||
fens[i] = [];
|
||||
for (var j = 0; j < o_desk.data.people; j++) {
|
||||
fens[i].push([j,o_desk.data.quanbufen[i][j]]);
|
||||
}
|
||||
}
|
||||
var myname = [];
|
||||
for (var i = 0; i < xinxi.length; i++) {
|
||||
if(xinxi[i]){
|
||||
myname[i] = [];
|
||||
myname[i][0] = xinxi[i][0];
|
||||
myname[i][1] = xinxi[i][2];
|
||||
}
|
||||
}
|
||||
var gameinfo1 = {};
|
||||
gameinfo1.round = fens;
|
||||
gameinfo1.playerlist = xinxi;
|
||||
gameinfo1.roundsum = o_room.asetcount;
|
||||
|
||||
var gameinfo2 = {};
|
||||
gameinfo2.huifang = o_desk.data.huifang;//各个小局情况
|
||||
gameinfo2.xinxi = myname;//昵称头像
|
||||
gameinfo2.roomcode = o_room.roomcode;//房间号
|
||||
gameinfo2.jushu = o_room.asetcount;//局数
|
||||
gameinfo2.leixing = paiju.leixing;//房间类型
|
||||
gameinfo2.playerid = o_desk.data.playerid;//id
|
||||
gameinfo2.difen = o_desk.data.difen;//底分
|
||||
gameinfo2.zha = paiju.zha;//炸
|
||||
//保存发包
|
||||
o_desk.debug.save_sendpack(msg,-1,-3);
|
||||
o_room.o_desk.debug.save_pack_curraset();
|
||||
mod_guanpai.import.save_grade(o_room, gameinfo1, gameinfo2, 0);
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
return exp;
|
||||
}
|
||||
}
|
||||
|
||||
//对内输出接口
|
||||
mod_guanpai.export = cls_mod_guanpai_export.new();
|
||||
35
codes/games/server/games/Guanpai/class.import.js
Normal file
35
codes/games/server/games/Guanpai/class.import.js
Normal file
@@ -0,0 +1,35 @@
|
||||
///////////////////////////////////////////////////
|
||||
/////// cls_mod_demo_import: 输入接口 ///////
|
||||
///////////////////////////////////////////////////
|
||||
var cls_mod_guanpai_import = cls_mod_guanpai_import || {
|
||||
|
||||
new: function() {
|
||||
|
||||
var imp = {};
|
||||
|
||||
//检查玩家数据包的合法性
|
||||
imp.check_player = function(agentid, gameid, roomcode, seat, playerid, conmode, fromid){
|
||||
return mod_guanpai.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, conmode, fromid);
|
||||
}
|
||||
|
||||
//扣除房卡
|
||||
imp.deduct_roomcard = function(o_room){
|
||||
return mod_guanpai.app.youle_room.export.deduct_roomcard(o_room);
|
||||
}
|
||||
|
||||
//保存战绩
|
||||
imp.save_grade = function(o_room, o_gameinfo1, o_gameinfo2, freeroomflag){
|
||||
mod_guanpai.app.youle_room.export.save_grade(o_room, o_gameinfo1, o_gameinfo2, freeroomflag);
|
||||
}
|
||||
|
||||
//完成游戏里的任务
|
||||
imp.finish_gametask = function(agentid, o_player, taskid){
|
||||
mod_guanpai.app.youle_room.export.finish_gametask(agentid, o_player, taskid);
|
||||
}
|
||||
|
||||
return imp;
|
||||
}
|
||||
}
|
||||
|
||||
// 输入接口
|
||||
mod_guanpai.import = cls_mod_guanpai_import.new();
|
||||
7
codes/games/server/games/Guanpai/config.js
Normal file
7
codes/games/server/games/Guanpai/config.js
Normal file
@@ -0,0 +1,7 @@
|
||||
var cls_guanpai_config = cls_guanpai_config || {}
|
||||
cls_guanpai_config.zha = 5;
|
||||
cls_guanpai_config.difen = 1;
|
||||
cls_guanpai_config.people = 0;
|
||||
cls_guanpai_config.zidongchu = 0;//自动出牌
|
||||
cls_guanpai_config.jizha = 4;//最大几个炸
|
||||
cls_guanpai_config.beishu = 1;
|
||||
717
codes/games/server/games/Guanpai/flow.js
Normal file
717
codes/games/server/games/Guanpai/flow.js
Normal file
@@ -0,0 +1,717 @@
|
||||
var guanpai_dapai = function(o_room , dq_dapai , seat ,laizi_dapai ,laizi_bian){
|
||||
var o_desk = o_room.o_desk;
|
||||
|
||||
var paiju = o_desk.method.CurrAset();
|
||||
if (paiju.control!=seat) {
|
||||
return;
|
||||
}
|
||||
if (o_desk.data.laizi ==1) {
|
||||
for (var i = 0; i < laizi_dapai.length; i++) {
|
||||
if(paiju.pai[seat].indexOf(laizi_dapai[i]) < 0){
|
||||
return;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for (var i = 0; i < dq_dapai.length; i++) {
|
||||
if(paiju.pai[seat].indexOf(dq_dapai[i]) < 0){
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (paiju.chuntian[seat] == 2 && o_desk.data.people == 3) {
|
||||
var hongsan = true;
|
||||
for (var i = 0; i < dq_dapai.length; i++) {
|
||||
if (dq_dapai[i] == paiju.xianchu) {
|
||||
hongsan = false;
|
||||
}
|
||||
}
|
||||
if (hongsan) {
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = 'dapai';
|
||||
msg.data = {};
|
||||
msg.data.put = false;
|
||||
msg.hongsan = false;
|
||||
o_room.method.sendpack_toseat(msg, seat);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//将牌id列表转换成牌对象列表
|
||||
dq_dapai = cls_guanpai_aset.CardIdsToCards(paiju, dq_dapai);
|
||||
//排序
|
||||
dq_dapai = cls_guanpai_card.SortCardList(dq_dapai);
|
||||
//获取牌型
|
||||
var paixing = cls_guanpai_card.GetMaxCardTypeByCardList(dq_dapai , 0);
|
||||
if (paixing[0][0] == 4 && paixing[0][1] >= 1) {//有个炸弹
|
||||
if (paiju.pai[seat].length - dq_dapai.length !=0) {
|
||||
if (dq_dapai.length == 10) {//10张牌
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,2], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,2];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}
|
||||
}else if (dq_dapai.length == 15) {//15张牌
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,3], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,3];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if (dq_dapai.length >6) {//多余6张牌
|
||||
if(dq_dapai.length <=9){//飞机 2
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,2], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,2];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}
|
||||
}
|
||||
else if (dq_dapai.length <=12 && dq_dapai.length >9) {//飞机 3
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,3], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,3];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}else{
|
||||
if (dq_dapai.length == 10) {
|
||||
feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,2], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,2];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if (dq_dapai.length >=12 &&dq_dapai.length <= 15) {//飞机 3.4
|
||||
if (paiju.paixing) {
|
||||
if (paiju.paixing[0][0] == 3 && paiju.paixing[0][1] == 4) {//飞机 3.4
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,4], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,4];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
|
||||
}
|
||||
}
|
||||
else if (paiju.paixing[0][0] == 3 && paiju.paixing[0][1] == 3) {//飞机 3.3
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,3], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,3];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}
|
||||
}
|
||||
}
|
||||
else{//飞机 3.3
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,4], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,4];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}else{//如果不是3飞机
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,3], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是3飞机
|
||||
paixing[0] = [3,3];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dq_dapai.length>15) {//飞机 3.4
|
||||
if (paiju.paixing) {
|
||||
if (paiju.paixing[0][0] == 3 && paiju.paixing[0][1] == 4) {//飞机 3.4
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,4], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,4];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}
|
||||
}else if (paiju.paixing[0][0] == 3 && paiju.paixing[0][1] == 5) {//飞机 3.5
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,5], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,5];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}
|
||||
}
|
||||
}else{//飞机 3.4
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,5], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是飞机
|
||||
paixing[0] = [3,5];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}else{//如果不是3飞机
|
||||
var feiji = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(dq_dapai,[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,拆牌,取所有情况] 起始牌
|
||||
[3,4], [0,0,1,0], null ,null);
|
||||
if(feiji.length){//如果有就是3飞机
|
||||
paixing[0] = [3,4];
|
||||
paixing[1] = feiji[feiji.length-1];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//将牌对象列表转换成牌id列表
|
||||
dq_dapai = cls_guanpai_aset.CardsToCardIds(dq_dapai);
|
||||
//判断是否能出
|
||||
var put = cls_guanpai_suanfa.dapai_guanpai(dq_dapai,paixing[0],paiju.pai[seat].length - dq_dapai.length,paixing[1][0][4],paixing[1][paixing[1].length-1][4],o_desk.data.people);
|
||||
paixing[0] = put[1];
|
||||
put = put[0];
|
||||
if (o_desk.data.laizi == 1) {
|
||||
if (put) {
|
||||
if (laizi_bian.length) {//有癞子
|
||||
paiju.benshoulai[1] = 1;
|
||||
}else{
|
||||
paiju.benshoulai[1] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(paiju.paixing && put){//如果不是第一个出牌
|
||||
//比较大小
|
||||
put = cls_guanpai_suanfa.bipai_guanpai(paixing , paiju.paixing ,paixing[1][0][4] , paiju.paixing[1][0][4] , dq_dapai.length , paiju.zuidapai.length , paiju.pai[seat].length - dq_dapai.length ,paiju.benshoulai,o_desk.data.laizi,o_desk.data.people);
|
||||
}
|
||||
if(put) {//如果能出
|
||||
//关闭定时器
|
||||
clearTimeout(o_room.o_desk.timer.dapai);
|
||||
clearTimeout(o_room.o_desk.timer.zc_dapai);
|
||||
//控制权
|
||||
paiju.control = cls_guanpai_suanfa.control_guanpai(o_desk.data.people,paiju.control);
|
||||
|
||||
paiju.benshoulai[0] = paiju.benshoulai[1];
|
||||
|
||||
paiju.chu = seat;//最近一次出牌的人
|
||||
if (o_desk.data.laizi) {
|
||||
//将牌id列表转换成牌对象列表
|
||||
laizi_dapai = cls_guanpai_aset.CardIdsToCards(paiju, laizi_dapai);
|
||||
//排序
|
||||
laizi_dapai = cls_guanpai_card.SortCardList(laizi_dapai);
|
||||
//将牌对象列表转换成牌id列表
|
||||
laizi_dapai = cls_guanpai_aset.CardsToCardIds(laizi_dapai);
|
||||
//删除牌
|
||||
cls_guanpai_aset.doPlayCard(paiju,seat,laizi_dapai);
|
||||
}else{
|
||||
//删除牌
|
||||
cls_guanpai_aset.doPlayCard(paiju,seat,dq_dapai);
|
||||
}
|
||||
|
||||
paiju.zhinengchu = 0;//只有一种能出
|
||||
paiju.sandai = 0;//是不是三带
|
||||
if (paiju.chuntian[seat] != 0) {
|
||||
paiju.chuntian[seat]--;
|
||||
}
|
||||
//保存最大牌
|
||||
paiju.paixing = paixing;
|
||||
paiju.zuidapai = dq_dapai;
|
||||
paiju.kexuanpai = [];
|
||||
//保存打牌的人
|
||||
paiju.seat = seat;
|
||||
// 获取手上剩余的牌 转换成id
|
||||
paiju.pai[seat] = cls_guanpai_aset.CardsToCardIds(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,seat),[1,1]));
|
||||
//如果是炸 奖 +1
|
||||
if((paixing[0][0] == 4 && dq_dapai.length == 4) || (dq_dapai.length == 3 && paixing[0][0] == 4)){
|
||||
//炸 算分
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
if (i != seat) {
|
||||
o_desk.data.grade[i] = o_desk.data.grade[i] - o_desk.data.zha;
|
||||
paiju.zha[i] = paiju.zha[i] - o_desk.data.zha;
|
||||
}else{
|
||||
o_desk.data.grade[i] = o_desk.data.grade[i] + o_desk.data.zha * (o_desk.data.people-1);
|
||||
paiju.zha[i] = paiju.zha[i] + o_desk.data.zha * (o_desk.data.people-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var tsp = cls_guanpai_suanfa.tishi_guanpai(o_room, seat,paiju.benshoulai,1);
|
||||
if (tsp) {
|
||||
paiju.tishipai = tsp[1];
|
||||
paiju.kexuanpai = tsp[0];
|
||||
}else{
|
||||
paiju.tishipai = [];
|
||||
paiju.kexuanpai = [];
|
||||
}
|
||||
for (var i = 0; i < paiju.tishipai.length; i++) {
|
||||
// for (var j = 0; j < paiju.tishipai[i].length; j++) {
|
||||
paiju.tishipai[i] = cls_guanpai_aset.CardsToCardIds(paiju.tishipai[i]);
|
||||
// }
|
||||
|
||||
}
|
||||
for (var i = 0; i < paiju.kexuanpai.length; i++) {
|
||||
// for (var j = 0; j < paiju.tishipai[i].length; j++) {
|
||||
paiju.kexuanpai[i] = cls_guanpai_aset.CardsToCardIds(paiju.kexuanpai[i]);
|
||||
// }
|
||||
}
|
||||
if (o_desk.data.laizi ==1) {
|
||||
var laizishu = 0;
|
||||
var laizi = [];
|
||||
for (var i = 0; i < paiju.pai[paiju.control].length; i++) {//有几张癞子牌
|
||||
if (paiju.pai[paiju.control][i]%13 == (paiju.laizi-1)%13) {
|
||||
laizishu = laizishu + 1;
|
||||
laizi.push(paiju.pai[paiju.control][i]);
|
||||
}
|
||||
}
|
||||
if (paiju.paixing[0][0] != 1 || paiju.paixing[0][1] != 1) {//加入癞子提示
|
||||
if (laizishu > 0) {
|
||||
if (paiju.tishipai.length>0) {//如果有提示牌 删掉带着癞子的
|
||||
for (var i = 0; i < paiju.tishipai.length; i++) {
|
||||
for (var j = 0; j < paiju.tishipai[i].length; j++) {
|
||||
if ((paiju.tishipai[i][j]+1)%13 == paiju.laizi%13) {
|
||||
paiju.tishipai.splice(i,1);
|
||||
i--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var lins = -1;
|
||||
var zuida = 14;
|
||||
if (o_desk.data.people == 3) {
|
||||
zuida = 15;
|
||||
}
|
||||
for (var j = 3; j <= zuida; j++) {//只有一个癞子//把自己的一张癞子牌遍历一遍
|
||||
for (var i = 0; i < paiju.cardlist.length; i++) {
|
||||
if (paiju.laizi != j) {
|
||||
if ((paiju.cardlist[i][4] == paiju.laizi || paiju.cardlist[i][0] == lins) && paiju.cardlist[i][6] == paiju.control && paiju.cardlist[i][8] == -1) {//有一个癞子
|
||||
cls_guanpai_card.SetArithN(paiju.cardlist[i],j);
|
||||
lins = paiju.cardlist[i][0];
|
||||
var tsp_laizi = cls_guanpai_suanfa.tishi_guanpai(o_room, seat,paiju.benshoulai,0);
|
||||
if (tsp_laizi) {//有没有可以提示的牌
|
||||
for (var l = 0; l < tsp_laizi[0].length; l++) {
|
||||
tsp_laizi[0][l] = cls_guanpai_aset.CardsToCardIds(tsp_laizi[0][l]);
|
||||
}
|
||||
for (var l = 0; l < tsp_laizi[1].length; l++) {
|
||||
tsp_laizi[1][l] = cls_guanpai_aset.CardsToCardIds(tsp_laizi[1][l]);
|
||||
}
|
||||
for (var l = 0; l < tsp_laizi[1].length; l++) {//删除有没变癞子的提示
|
||||
for (var k = 0; k < tsp_laizi[1][l].length; k++) {
|
||||
if ((tsp_laizi[1][l][k]+1)%13 == paiju.laizi%13 && tsp_laizi[1][l][k] != paiju.cardlist[i][0]) {
|
||||
tsp_laizi[1].splice(l,1);
|
||||
l--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
var tong = false;
|
||||
if (paiju.tishipai.length>0) {//删掉冲突的提示
|
||||
for (var q = 0; q < paiju.tishipai.length; q++) {
|
||||
for (var g = 0; g < tsp_laizi[1].length; g++) {
|
||||
for (var w = 0; w < paiju.tishipai[q].length; w++) {
|
||||
// if (paiju.tishipai[q][w] != tsp_laizi[1][q][w]) {
|
||||
// tong = true;
|
||||
// break;
|
||||
// }
|
||||
if (paiju.tishipai[q].length == tsp_laizi[1][g].length) {//如果张数一样
|
||||
if (paiju.tishipai[q][w] != tsp_laizi[1][g][w]) {
|
||||
tong = true;
|
||||
break;
|
||||
}else{
|
||||
tong = false;
|
||||
}
|
||||
}else{
|
||||
tong = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!tong) {//如果相同 删掉这个
|
||||
tsp_laizi[1].splice(g,1);
|
||||
q--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
tong = true;
|
||||
}
|
||||
if (tong) {
|
||||
//加入癞子提示
|
||||
for (var i = 0; i < tsp_laizi[1].length; i++) {
|
||||
paiju.tishipai.push(tsp_laizi[1][i]);
|
||||
}
|
||||
// paiju.tishipai.push(tsp_laizi[1]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (laizishu>=1) {
|
||||
for (var i = 0; i < paiju.cardlist.length; i++) {//癞子变回原牌
|
||||
if (paiju.cardlist[i][0]%13 != (paiju.cardlist[i][4]-1)%13) {
|
||||
if (paiju.cardlist[i][0]%13 +1 == 1) {
|
||||
paiju.cardlist[i][4] = 14;
|
||||
}else if (paiju.cardlist[i][0]%13 +1 == 2) {
|
||||
paiju.cardlist[i][4] = 15;
|
||||
}else{
|
||||
paiju.cardlist[i][4] = paiju.cardlist[i][0]%13 +1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (laizishu >=1 &&(paiju.paixing[0][0] != 4 || paiju.benshoulai[0] == 1 )) {//有1个以上癞子 加入最大张数的炸弹
|
||||
var laizizha = cls_guanpai_suanfa.zhadan_guanpai(o_room,laizishu,laizi);
|
||||
if (laizizha) {//癞子炸加入提示
|
||||
for (var i = 0; i < laizizha.length; i++) {
|
||||
paiju.tishipai.push(laizizha[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < paiju.tishipai.length; i++) {//取出可选牌
|
||||
for (var l = 0; l < paiju.tishipai[i].length; l++) {
|
||||
// for (var j = 0; j < paiju.tishipai[i][l].length; j++) {
|
||||
paiju.kexuanpai.push(paiju.tishipai[i][l]);
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
paiju.xs_dapai[seat] = dq_dapai;
|
||||
paiju.xs_dapai[paiju.control] = [];
|
||||
var xs_dapai = [];
|
||||
for (var i = 0; i < paiju.xs_dapai.length; i++) {
|
||||
xs_dapai[i] = [];
|
||||
for (var j = 0; j < paiju.xs_dapai[i].length; j++) {
|
||||
xs_dapai[i].push(paiju.xs_dapai[i][j]);
|
||||
}
|
||||
}
|
||||
var grade = [];
|
||||
var pai = [];
|
||||
var bian = [];
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
grade[i] = o_desk.data.grade[i];
|
||||
pai.push(paiju.pai[i]);
|
||||
bian.push(paiju.laizi_bian[i]);
|
||||
}
|
||||
//保存回放出牌 显示打的牌 牌型 剩余牌 总分 控制权
|
||||
o_desk.data.putpai.push([xs_dapai,paiju.paixing[0],pai,grade,paiju.control,bian]);
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
paiju.carlen[i] = paiju.pai[i].length;
|
||||
}
|
||||
|
||||
if(paiju.tishipai.length == 1 ){//如果只有一个可出
|
||||
paiju.zhinengchu = 1;
|
||||
}
|
||||
if(paiju.pai[seat].length == 0){
|
||||
paiju.shengli = seat;
|
||||
paiju.benju = 1;
|
||||
//结算
|
||||
o_desk.method.guanpai_jiesuan();
|
||||
}else{
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = 'dapai';
|
||||
msg.data = {};
|
||||
msg.data.put = put;
|
||||
msg.data.xs_dapai = paiju.xs_dapai;
|
||||
msg.data.control = paiju.control;
|
||||
msg.data.zha = paiju.zha;
|
||||
msg.data.seat = paiju.seat;
|
||||
msg.data.paixing = paiju.paixing;
|
||||
msg.data.grade = o_desk.data.grade;
|
||||
msg.data.carlen = paiju.carlen;
|
||||
msg.data.countdown = paiju.countdown;
|
||||
msg.data.chu = paiju.chu;//最近一次出牌的人
|
||||
msg.data.laizi_dapai = paiju.laizi_dapai;
|
||||
msg.data.laizi_bian = paiju.laizi_bian;
|
||||
msg.data.tuoguan = paiju.tuoguan[seat];
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]){
|
||||
if (i == seat) {
|
||||
msg.data.pai = paiju.pai[seat];
|
||||
}else{
|
||||
msg.data.pai = [];
|
||||
}
|
||||
if (i == paiju.control) {
|
||||
msg.data.kexuanpai = paiju.kexuanpai;
|
||||
msg.data.zhinengchu = paiju.zhinengchu;
|
||||
msg.data.baodan = paiju.baodan;
|
||||
msg.data.tishipai = paiju.tishipai;
|
||||
}else{
|
||||
msg.data.kexuanpai = [];
|
||||
msg.data.zhinengchu = [];
|
||||
msg.data.baodan = [];
|
||||
msg.data.tishipai = [];
|
||||
}
|
||||
o_room.method.sendpack_toseat(msg, i);
|
||||
}
|
||||
}
|
||||
if (o_room.roomtype[7]==2) {
|
||||
o_room.o_desk.timer.zc_dapai = setTimeout(o_room.o_desk.method.guanpai_dapai,paiju.countdown+2000);
|
||||
}
|
||||
if (paiju.tuoguan[paiju.control]) {
|
||||
o_room.o_desk.timer.dapai = setTimeout(o_room.o_desk.method.guanpai_dapai,2000);
|
||||
}
|
||||
}
|
||||
}else{//如果不能出
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = 'dapai';
|
||||
msg.data = {};
|
||||
msg.data.put = false;
|
||||
msg.hongsan = true;
|
||||
o_room.method.sendpack_toseat(msg, seat);
|
||||
}
|
||||
}
|
||||
var guanpai_buyao = function(o_room , pass , seat ){
|
||||
var o_desk = o_room.o_desk;
|
||||
|
||||
var paiju = o_desk.method.CurrAset();
|
||||
if (paiju.control!=seat) {
|
||||
return;
|
||||
}
|
||||
paiju.seat = seat;
|
||||
//关闭定时器
|
||||
clearTimeout(o_room.o_desk.timer.dapai);
|
||||
clearTimeout(o_room.o_desk.timer.zc_dapai);
|
||||
//控制权
|
||||
paiju.control = cls_guanpai_suanfa.control_guanpai(o_desk.data.people,paiju.control);
|
||||
paiju.xs_dapai[seat] = [-1];
|
||||
paiju.xs_dapai[paiju.control] = [];
|
||||
paiju.zhinengchu = 0;//只有一种能出
|
||||
paiju.sandai = 0;//是不是三带
|
||||
var jiesu = 0;
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
if (paiju.xs_dapai[i][0]==-1 || paiju.xs_dapai[i].length == 0) {
|
||||
jiesu = jiesu +1;
|
||||
}else{
|
||||
jiesu = 0;
|
||||
}
|
||||
|
||||
}
|
||||
if (jiesu == o_desk.data.people) {
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
paiju.xs_dapai[i] = [];
|
||||
}
|
||||
paiju.benshoulai= [0,0];
|
||||
paiju.paixing = null;
|
||||
//获取手上剩余的牌 转换成id
|
||||
paiju.pai[paiju.control] = cls_guanpai_aset.CardsToCardIds(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[1,1]));
|
||||
paiju.kexuanpai = paiju.pai[paiju.control];
|
||||
paiju.tishipai = [];
|
||||
}else{
|
||||
var tsp = cls_guanpai_suanfa.tishi_guanpai(o_room,seat,paiju.benshoulai,1);
|
||||
if (tsp) {
|
||||
paiju.tishipai = tsp[1];
|
||||
paiju.kexuanpai = tsp[0];
|
||||
}else{
|
||||
paiju.tishipai = [];
|
||||
paiju.kexuanpai = [];
|
||||
}
|
||||
for (var i = 0; i < paiju.tishipai.length; i++) {
|
||||
// for (var j = 0; j < paiju.tishipai[i].length; j++) {
|
||||
paiju.tishipai[i] = cls_guanpai_aset.CardsToCardIds(paiju.tishipai[i]);
|
||||
// }
|
||||
}
|
||||
for (var i = 0; i < paiju.kexuanpai.length; i++) {
|
||||
// for (var j = 0; j < paiju.tishipai[i].length; j++) {
|
||||
paiju.kexuanpai[i] = cls_guanpai_aset.CardsToCardIds(paiju.kexuanpai[i]);
|
||||
// }
|
||||
}
|
||||
if (o_desk.data.laizi ==1) {
|
||||
var laizishu = 0;
|
||||
var laizi = [];
|
||||
for (var i = 0; i < paiju.pai[paiju.control].length; i++) {//有几张癞子牌
|
||||
if (paiju.pai[paiju.control][i]%13 == (paiju.laizi-1)%13) {
|
||||
laizishu = laizishu + 1;
|
||||
laizi.push(paiju.pai[paiju.control][i]);
|
||||
}
|
||||
}
|
||||
if (paiju.paixing[0][0] != 1 || paiju.paixing[0][1] != 1) {//加入癞子提示
|
||||
if (laizishu > 0) {
|
||||
if (paiju.tishipai.length>0) {//如果有提示牌 删掉带着癞子的
|
||||
for (var i = 0; i < paiju.tishipai.length; i++) {
|
||||
for (var j = 0; j < paiju.tishipai[i].length; j++) {
|
||||
if ((paiju.tishipai[i][j]+1)%13 == paiju.laizi%13) {
|
||||
paiju.tishipai.splice(i,1);
|
||||
i--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var lins = -1;
|
||||
var zuida = 14;
|
||||
if (o_desk.data.people == 3) {
|
||||
zuida = 15;
|
||||
}
|
||||
for (var j = 3; j <= zuida; j++) {//只有一个癞子//把自己的一张癞子牌遍历一遍
|
||||
for (var i = 0; i < paiju.cardlist.length; i++) {
|
||||
if (paiju.laizi != j) {
|
||||
if ((paiju.cardlist[i][4] == paiju.laizi || paiju.cardlist[i][0] == lins) && paiju.cardlist[i][6] == paiju.control && paiju.cardlist[i][8] == -1) {//有一个癞子
|
||||
cls_guanpai_card.SetArithN(paiju.cardlist[i],j);
|
||||
lins = paiju.cardlist[i][0];
|
||||
var tsp_laizi = cls_guanpai_suanfa.tishi_guanpai(o_room, seat,paiju.benshoulai,0);
|
||||
if (tsp_laizi) {//有没有可以提示的牌
|
||||
for (var l = 0; l < tsp_laizi[0].length; l++) {
|
||||
tsp_laizi[0][l] = cls_guanpai_aset.CardsToCardIds(tsp_laizi[0][l]);
|
||||
}
|
||||
for (var l = 0; l < tsp_laizi[1].length; l++) {
|
||||
tsp_laizi[1][l] = cls_guanpai_aset.CardsToCardIds(tsp_laizi[1][l]);
|
||||
}
|
||||
for (var l = 0; l < tsp_laizi[1].length; l++) {//删除有没变癞子的提示
|
||||
for (var k = 0; k < tsp_laizi[1][l].length; k++) {
|
||||
if ((tsp_laizi[1][l][k]+1)%13 == paiju.laizi%13 && tsp_laizi[1][l][k] != paiju.cardlist[i][0]) {
|
||||
tsp_laizi[1].splice(l,1);
|
||||
l--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
var tong = false;
|
||||
if (paiju.tishipai.length>0) {//删掉冲突的提示
|
||||
for (var q = 0; q < paiju.tishipai.length; q++) {
|
||||
for (var g = 0; g < tsp_laizi[1].length; g++) {
|
||||
for (var w = 0; w < paiju.tishipai[q].length; w++) {
|
||||
// if (paiju.tishipai[q][w] != tsp_laizi[1][q][w]) {
|
||||
// tong = true;
|
||||
// break;
|
||||
// }
|
||||
if (paiju.tishipai[q].length == tsp_laizi[1][g].length) {//如果张数一样
|
||||
if (paiju.tishipai[q][w] != tsp_laizi[1][g][w]) {
|
||||
tong = true;
|
||||
break;
|
||||
}else{
|
||||
tong = false;
|
||||
}
|
||||
}else{
|
||||
tong = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!tong) {//如果相同 删掉这个
|
||||
tsp_laizi[1].splice(g,1);
|
||||
q--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
tong = true;
|
||||
}
|
||||
if (tong) {
|
||||
//加入癞子提示
|
||||
for (var i = 0; i < tsp_laizi[1].length; i++) {
|
||||
paiju.tishipai.push(tsp_laizi[1][i]);
|
||||
}
|
||||
// paiju.tishipai.push(tsp_laizi[1]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (laizishu>=1) {
|
||||
for (var i = 0; i < paiju.cardlist.length; i++) {//癞子变回原牌
|
||||
if (paiju.cardlist[i][0]%13 != (paiju.cardlist[i][4]-1)%13) {
|
||||
if (paiju.cardlist[i][0]%13 +1 == 1) {
|
||||
paiju.cardlist[i][4] = 14;
|
||||
}else if (paiju.cardlist[i][0]%13 +1 == 2) {
|
||||
paiju.cardlist[i][4] = 15;
|
||||
}else{
|
||||
paiju.cardlist[i][4] = paiju.cardlist[i][0]%13 +1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (laizishu >=1 &&(paiju.paixing[0][0] != 4 || paiju.benshoulai[0] == 1 )) {//有1个以上癞子 加入最大张数的炸弹
|
||||
var laizizha = cls_guanpai_suanfa.zhadan_guanpai(o_room,laizishu,laizi);
|
||||
if (laizizha) {//癞子炸加入提示
|
||||
for (var i = 0; i < laizizha.length; i++) {
|
||||
paiju.tishipai.push(laizizha[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < paiju.tishipai.length; i++) {//取出可选牌
|
||||
for (var l = 0; l < paiju.tishipai[i].length; l++) {
|
||||
// for (var j = 0; j < paiju.tishipai[i][l].length; j++) {
|
||||
paiju.kexuanpai.push(paiju.tishipai[i][l]);
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(paiju.tishipai.length == 1 ){//如果只有一个可出
|
||||
paiju.zhinengchu = 1;
|
||||
}
|
||||
var xs_dapai = [];
|
||||
for (var i = 0; i < paiju.xs_dapai.length; i++) {
|
||||
xs_dapai[i] = [];
|
||||
for (var j = 0; j < paiju.xs_dapai[i].length; j++) {
|
||||
xs_dapai[i].push(paiju.xs_dapai[i][j]);
|
||||
}
|
||||
}
|
||||
var grade = [];
|
||||
var pai = [];
|
||||
var bian = [];
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
grade[i] = o_desk.data.grade[i];
|
||||
pai.push(paiju.pai[i]);
|
||||
bian.push(paiju.laizi_bian[i]);
|
||||
}
|
||||
//保存回放出牌 显示打的牌 牌型 剩余牌 总分 控制权
|
||||
o_desk.data.putpai.push([xs_dapai,-1,pai,grade,paiju.control,bian]);
|
||||
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = 'buyao';
|
||||
msg.data = {};
|
||||
msg.data.xs_dapai = paiju.xs_dapai;
|
||||
msg.data.control = paiju.control;
|
||||
msg.data.seat = paiju.seat;
|
||||
msg.data.paixing = paiju.paixing;
|
||||
msg.data.countdown = paiju.countdown;
|
||||
msg.data.pass = pass;
|
||||
msg.data.kexuanpai = [];
|
||||
msg.data.tuoguan = paiju.tuoguan[seat];
|
||||
o_room.method.sendpack_toother(msg, paiju.control);
|
||||
msg.data.zhinengchu = paiju.zhinengchu;
|
||||
msg.data.kexuanpai = paiju.kexuanpai;
|
||||
msg.data.baodan = paiju.baodan;
|
||||
msg.data.tishipai = paiju.tishipai;
|
||||
o_room.method.sendpack_toseat(msg, paiju.control);
|
||||
if(o_room.roomtype[7]==2){
|
||||
if (paiju.tuoguan[paiju.control]) {
|
||||
o_room.o_desk.timer.dapai = setTimeout(o_room.o_desk.method.guanpai_dapai,2000);
|
||||
}
|
||||
o_room.o_desk.timer.zc_dapai = setTimeout(o_room.o_desk.method.guanpai_dapai,paiju.countdown+2000);
|
||||
|
||||
}
|
||||
}
|
||||
78
codes/games/server/games/Guanpai/guanpai_aset.js
Normal file
78
codes/games/server/games/Guanpai/guanpai_aset.js
Normal file
@@ -0,0 +1,78 @@
|
||||
//牌局类
|
||||
var cls_guanpai_aset = cls_aset2.NewClass();
|
||||
var cls_guanpai_card = cls_card2.NewClass();
|
||||
//实例一个流程
|
||||
cls_guanpai_aset.New = function(o_desk){
|
||||
//定义小局
|
||||
var o_aset = this.declare();
|
||||
//初始化牌列表
|
||||
this.initcardlist(o_aset);
|
||||
//除掉不要的牌
|
||||
this.deletecard(o_aset,o_desk);
|
||||
//设置每张牌的分值
|
||||
this.setcardscore(o_aset);
|
||||
return o_aset;
|
||||
};
|
||||
cls_guanpai_aset.declare = function(){
|
||||
var aset = cls_aset2.declare();
|
||||
aset.paixing = null;//牌型
|
||||
aset.chuntian = [1,1,1];//春天
|
||||
aset.kexuanpai = [];//可以出的牌
|
||||
aset.zha = [0,0,0];//炸
|
||||
aset.zhuang = 0;//庄
|
||||
aset.chupai = 0;//能不能出0不能 1能
|
||||
aset.zhuangtai = 1;//状态
|
||||
aset.countdown = 15000;//倒计时
|
||||
aset.xiaojufen = [0,0,0];//小局分
|
||||
aset.xs_dapai = [];
|
||||
aset.pai = [];//牌
|
||||
aset.shengli = 0;//胜利的人
|
||||
aset.seat = 0;//出牌的人
|
||||
aset.control = -1;//控制权
|
||||
aset.dq_dapai= [];//最大牌
|
||||
aset.benju = 0;//是否结束
|
||||
aset.zhunbei = [0,0,0];//是否准备
|
||||
aset.carlen = [];//每个人剩几张牌
|
||||
aset.kaijufen = [];//本小局开始时的分数
|
||||
aset.zhinengchu = 0;//只有一种能出
|
||||
aset.sandai = 0;//是不是三带
|
||||
aset.baodan = null;//报单
|
||||
aset.tishipai = [];//提示牌
|
||||
aset.tuoguan = [0,0,0];//托管
|
||||
aset.zidongchu = 0;//自动出牌
|
||||
aset.laizi = [];//癞子
|
||||
aset.benshoulai = [0,0];
|
||||
aset.xianchu = 28;
|
||||
aset.chu = 0;//最近一次出牌的人
|
||||
aset.laizi_dapai = null;
|
||||
aset.laizi_bian = [];
|
||||
return aset;
|
||||
};
|
||||
|
||||
//几副牌
|
||||
cls_guanpai_aset.get_cardcount = function(){
|
||||
return 1;
|
||||
};
|
||||
//除掉不要的牌
|
||||
cls_guanpai_aset.deletecard = function(o_aset,o_desk){
|
||||
cls_aset2.deletecard(o_aset);
|
||||
if (o_desk.data.people == 2) {
|
||||
this.get_cardclass().SetDeal(o_aset.cardlist[14], -2);
|
||||
this.get_cardclass().SetDeal(o_aset.cardlist[27], -2);
|
||||
this.get_cardclass().SetDeal(o_aset.cardlist[0], -2);
|
||||
}
|
||||
this.get_cardclass().SetDeal(o_aset.cardlist[1], -2);
|
||||
this.get_cardclass().SetDeal(o_aset.cardlist[52], -2);
|
||||
this.get_cardclass().SetDeal(o_aset.cardlist[53], -2);
|
||||
};
|
||||
//每人需要发多少张牌
|
||||
cls_guanpai_aset.get_dealcount = function(paiju , o_desk){
|
||||
return 17;
|
||||
};
|
||||
cls_guanpai_aset.get_bottomcount = function(paiju , o_desk){
|
||||
if (o_desk.data.people == 2) {
|
||||
return 14;
|
||||
}else if (o_desk.data.people == 3) {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
230
codes/games/server/games/Guanpai/guanpai_desk.js
Normal file
230
codes/games/server/games/Guanpai/guanpai_desk.js
Normal file
@@ -0,0 +1,230 @@
|
||||
var cls_desk_guanpai = cls_desk_guanpai || {
|
||||
new: function(o_room,card){
|
||||
//新建牌桌对象
|
||||
var o_desk = cls_desk2.new(o_room);
|
||||
//玩家得分列表
|
||||
o_desk.data.grade = [];
|
||||
o_desk.data.quanbufen = [];//
|
||||
o_desk.data.huifang = [];//回放汇总
|
||||
o_desk.data.putpai = [];//出牌情况
|
||||
o_desk.data.zhanji = [];//战绩分
|
||||
o_desk.data.playerid = [];
|
||||
o_desk.data.zhunbei = [1,1,1];//准备阶段
|
||||
o_desk.data.laizi = 0;
|
||||
o_desk.data.people = card.people[o_room.roomtype[1]-1];
|
||||
o_desk.data.zha = card.zha[o_room.roomtype[2]-1];
|
||||
o_desk.data.difen = o_room.roomtype[4];
|
||||
o_desk.data.beishu = o_room.roomtype[6][0];
|
||||
o_desk.data.zidongchu = card.zidongchu;
|
||||
o_desk.data.ju = 0;
|
||||
switch(o_room.roomtype[3]){//模式
|
||||
case 1:
|
||||
o_desk.data.laizi = 0;
|
||||
break;
|
||||
case 2:
|
||||
o_desk.data.laizi = 1;
|
||||
break;
|
||||
}
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
o_desk.data.playerid.push(o_room.seatlist[i].playerid);
|
||||
}else{
|
||||
var data = {};
|
||||
data.roomcode = o_room.roomcode;
|
||||
data.people = o_desk.data.people;
|
||||
data.roomtype = o_room.roomtype;
|
||||
o_desk.debug.save_log("guanpai","zuowei",min_jsontostr(data));
|
||||
}
|
||||
|
||||
}
|
||||
o_desk.method_flow = null;
|
||||
o_desk.timer.fapai = 0;
|
||||
o_desk.timer.dapai = 0;
|
||||
o_desk.timer.zc_dapai = 0;
|
||||
o_desk.timer.buyao = 0;
|
||||
o_desk.timer.flow = 0;
|
||||
o_desk.timer.tiren = 0;
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
o_desk.data.grade.push(0);
|
||||
}
|
||||
//新建一局
|
||||
o_desk.method.AsetClass = function(){
|
||||
return cls_guanpai_aset;
|
||||
};
|
||||
o_desk.method.NewAset = function(){
|
||||
var o_aset = o_desk.method.AsetClass().New(o_desk);
|
||||
o_desk.data.asetlist.push(o_aset);
|
||||
return o_aset;
|
||||
};
|
||||
//发牌
|
||||
o_desk.method.guanpai_fapai = function(){
|
||||
cls_desk_guanpai.fapai(o_desk.o_room);
|
||||
};
|
||||
o_desk.method.guanpai_jiesuan = function(){
|
||||
cls_guanpai_suanfa.jiesuan_guanpai(o_desk.o_room , o_desk.o_room.o_game.o_agent.agentid);
|
||||
};
|
||||
//流程
|
||||
o_desk.method.guanpai_flow = function(){
|
||||
cls_desk_guanpai.flow(o_desk.o_room);
|
||||
};
|
||||
//打牌
|
||||
o_desk.method.guanpai_dapai = function(){
|
||||
cls_guanpai_timer.dapai(o_desk.o_room);
|
||||
};
|
||||
//不要
|
||||
o_desk.method.guanpai_buyao = function(){
|
||||
cls_guanpai_timer.buyao(o_desk.o_room);
|
||||
};
|
||||
},
|
||||
fapai:function(o_room){
|
||||
var o_desk = o_room.o_desk;
|
||||
|
||||
//获取当前小局对象
|
||||
var paiju = o_desk.method.CurrAset();
|
||||
//局数
|
||||
paiju.jushu = [o_desk.data.asetlist.length,o_room.asetcount];
|
||||
//A和2的算法大小改变
|
||||
for (var i = 0; i < paiju.cardlist.length; i++) {
|
||||
if (cls_guanpai_card.GetNumber(paiju.cardlist[i]) == 1) {
|
||||
cls_guanpai_card.SetArithN(paiju.cardlist[i],14);
|
||||
} else if (cls_guanpai_card.GetNumber(paiju.cardlist[i]) == 2){
|
||||
cls_guanpai_card.SetArithN(paiju.cardlist[i],15);
|
||||
}
|
||||
}
|
||||
//发牌
|
||||
cls_guanpai_aset.DealCard(paiju,o_desk);
|
||||
o_desk.data.ju++;
|
||||
paiju.leixing = o_room.roomtype;//保存选择的玩法
|
||||
o_desk.data.putpai = [];//出牌情况
|
||||
|
||||
//把所有的 xx 发给 rr
|
||||
|
||||
// var xx = [5,18,31,44];
|
||||
// var rr = 0;
|
||||
// var diji = 0;
|
||||
// for(var i = 0; i < xx.length; i++){
|
||||
// for (var j = diji; j < paiju.cardlist.length; j++) {
|
||||
// if(paiju.cardlist[j][7] == rr){
|
||||
// cls_paodekuai_card.SetArithN(paiju.cardlist[j],xx[i]);//这张牌改成xx[i]
|
||||
// paiju.cardlist[j][2] = xx[i];//这张牌改成xx[i]
|
||||
// paiju.cardlist[j][0] = xx[i]-1;
|
||||
// diji = j+1;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
for (var j = 0; j < o_desk.data.people; j++) {
|
||||
paiju.pai[j] = cls_guanpai_aset.CardsToCardIds(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,j),[1,1]));
|
||||
paiju.xs_dapai[j] = [];
|
||||
paiju.laizi_bian[j] = [];
|
||||
if (paiju.pai[j].length != 17) {
|
||||
var data = {};
|
||||
data.roomcode = o_room.roomcode;
|
||||
data.people = o_desk.data.people;
|
||||
data.roomtype = o_room.roomtype;
|
||||
data.fapaizhangshu = o_desk.data.fapaizhangshu;//发牌张数
|
||||
data.liupai = o_desk.data.liupai;//留牌
|
||||
o_desk.debug.save_log("guanpai","fapai",min_jsontostr(data));
|
||||
//重新发牌
|
||||
cls_guanpai_aset.DealCard(paiju,o_desk);
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
paiju.pai[i] = cls_guanpai_aset.CardsToCardIds(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,i),[1,1]));
|
||||
paiju.xs_dapai[i] = [];
|
||||
paiju.laizi_bian[i] = [];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (o_desk.data.laizi) {
|
||||
paiju.laizi = min_random(3,15);//癞子
|
||||
}
|
||||
//控制权 1黑桃 2红桃 3房主
|
||||
if (o_desk.data.people == 2) {
|
||||
if (o_desk.data.asetlist.length>1) {
|
||||
paiju.control = o_desk.data.asetlist[o_desk.data.asetlist.length-2].shengli;
|
||||
}else{
|
||||
paiju.control = 0;
|
||||
}
|
||||
}else{
|
||||
if (o_desk.data.laizi) {
|
||||
for (var i = 0; i < paiju.cardlist.length; i++) {
|
||||
if ( paiju.laizi == 3 ) {
|
||||
if (paiju.cardlist[i][0] == 29) {
|
||||
paiju.control = paiju.cardlist[i][6];
|
||||
paiju.xianchu = 29;
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
if (paiju.cardlist[i][0] == 28) {
|
||||
paiju.control = paiju.cardlist[i][6];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for (var i = 0; i < paiju.cardlist.length; i++) {
|
||||
if (paiju.cardlist[i][0] == 28) {
|
||||
paiju.control = paiju.cardlist[i][6];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
paiju.carlen[i] = paiju.pai[i].length;
|
||||
}
|
||||
paiju.kexuanpai = paiju.pai[paiju.control];
|
||||
paiju.kaijufen = [];
|
||||
paiju.zhuang = paiju.control;//记录第一个出牌的人
|
||||
for (var i = 0; i < o_desk.data.people; i++) {
|
||||
paiju.kaijufen.push(o_desk.data.grade[i]);//记录开局的分数
|
||||
}
|
||||
paiju.chuntian[paiju.control] = 2;
|
||||
paiju.zhuangtai = 1;
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = 'fapai';
|
||||
msg.data = {};
|
||||
msg.data.jushu = paiju.jushu;
|
||||
msg.data.control = paiju.control;
|
||||
msg.data.zhuangtai = paiju.zhuangtai;
|
||||
msg.data.countdown = paiju.countdown;
|
||||
msg.data.carlen = paiju.carlen;
|
||||
msg.data.leixing = paiju.leixing;
|
||||
if (o_desk.data.laizi) {
|
||||
msg.data.laizi = paiju.laizi;
|
||||
}
|
||||
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
msg.data.pai = paiju.pai[i];
|
||||
o_room.method.sendpack_toseat(msg, i);
|
||||
}
|
||||
//保存发包
|
||||
o_desk.debug.save_sendpack(msg,-1,-1);
|
||||
if (o_room.roomtype[7] ==2) {
|
||||
o_room.o_desk.timer.zc_dapai = setTimeout(o_desk.method.guanpai_dapai,paiju.countdown+2000);
|
||||
}
|
||||
|
||||
},
|
||||
flow:function(o_room){
|
||||
var o_desk = o_room.o_desk;
|
||||
o_desk.method_flow = cls_flowMgr2.new();
|
||||
//在流程库中添加一个流程
|
||||
o_desk.method_flow.method.addflow(1, "dapai", o_desk.method.guanpai_fapai,null, -1, 1, 1);
|
||||
o_desk.method_flow.method.addflow(2, "jiesuan", o_desk.method.guanpai_jiesuan, null, -1, 1, 1);
|
||||
o_desk.method_flow.steplist = [1,2];
|
||||
//设置流程
|
||||
o_desk.method_flow.method.set(o_desk.method_flow.steplist);
|
||||
if (o_desk.o_room.infinite) {
|
||||
o_desk.data.asetlist = [];
|
||||
}
|
||||
|
||||
//新建一局
|
||||
o_desk.method.NewAset();
|
||||
var paiju = o_desk.method.CurrAset();
|
||||
paiju.zhuangtai = 99;
|
||||
}
|
||||
}
|
||||
157
codes/games/server/games/Guanpai/mod.js
Normal file
157
codes/games/server/games/Guanpai/mod.js
Normal file
@@ -0,0 +1,157 @@
|
||||
var mod_guanpai = mod_guanpai || cls_mod.new("mod_guanpai", "guanpai", youle_app);
|
||||
mod_guanpai.import = null;
|
||||
mod_guanpai.export = null;
|
||||
min_loadJsFile("games8/Guanpai/class.import.js", function(){
|
||||
min_loadJsFile("games8/Guanpai/class.export.js", function(){
|
||||
min_loadJsFile("games8/Guanpai/config.js", function(){
|
||||
min_loadJsFile("games8/Guanpai/arithmetic.js", function(){
|
||||
min_loadJsFile("games8/Guanpai/guanpai_desk.js", function(){
|
||||
min_loadJsFile("games8/Guanpai/timer.js", function(){
|
||||
min_loadJsFile("games8/Guanpai/guanpai_aset.js", function(){
|
||||
min_loadJsFile("games8/Guanpai/flow.js", function(){
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
mod_guanpai.dapai = 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 dq_dapai = pack.data.dq_dapai;
|
||||
|
||||
|
||||
//检查玩家数据包的合法性
|
||||
var o_room = mod_guanpai.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room){
|
||||
return;
|
||||
}
|
||||
var o_desk = o_room.o_desk;
|
||||
var paiju = o_desk.method.CurrAset();
|
||||
if (o_desk.data.laizi == 1) {
|
||||
paiju.laizi_dapai = pack.data.laizi_dapai;
|
||||
paiju.laizi_bian[seat] = pack.data.laizi_bian;
|
||||
}
|
||||
|
||||
//保存收包
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
|
||||
guanpai_dapai(o_room, dq_dapai , seat ,paiju.laizi_dapai ,paiju.laizi_bian[seat]);
|
||||
|
||||
//保存发包
|
||||
o_desk.debug.save_sendpack(pack,seat,playerid);
|
||||
}
|
||||
|
||||
|
||||
mod_guanpai.buyao = 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 pass = pack.data.pass;
|
||||
//检查玩家数据包的合法性
|
||||
var o_room = mod_guanpai.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room){
|
||||
return;
|
||||
}
|
||||
var o_desk = o_room.o_desk;
|
||||
//保存收包
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
|
||||
guanpai_buyao(o_room, pass , seat );
|
||||
//保存发包
|
||||
o_desk.debug.save_sendpack(pack,seat,playerid);
|
||||
}
|
||||
|
||||
mod_guanpai.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 = mod_guanpai.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room){
|
||||
return;
|
||||
}
|
||||
|
||||
var o_desk = o_room.o_desk;
|
||||
var paiju = o_desk.method.CurrAset();
|
||||
if (paiju.benju !=1 || paiju.zhunbei[seat] == 1) {
|
||||
return;
|
||||
}
|
||||
//保存收包
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
paiju.zhunbei[seat] = 1;
|
||||
pack.data.zhunbei = paiju.zhunbei;
|
||||
pack.data.zhuangtai = paiju.zhuangtai;
|
||||
pack.data.seat = seat;
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
pack.conmode = o_room.seatlist[i].conmode;
|
||||
pack.fromid = o_room.seatlist[i].fromid;
|
||||
youle_room.app.SendPack(pack);
|
||||
}
|
||||
}
|
||||
//保存发包
|
||||
o_desk.debug.save_sendpack(pack,seat,playerid);
|
||||
//牌局长度小于总局数
|
||||
var zhunbei = 0;
|
||||
if (o_room.o_desk.data.asetlist.length < o_room.asetcount) {
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if(o_room.seatlist[i]){
|
||||
if (paiju.zhunbei[i] == 1) {
|
||||
zhunbei = zhunbei +1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (zhunbei == o_desk.data.people && o_desk.o_room.infinite == 0) {
|
||||
o_desk.method.guanpai_flow();
|
||||
//开始流程
|
||||
o_desk.method_flow.method.startflow();
|
||||
}
|
||||
}
|
||||
}
|
||||
mod_guanpai.tuoguan = 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 tuoguan = pack.data.tuoguan;
|
||||
//检查玩家数据包的合法性
|
||||
var o_room = mod_guanpai.import.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room){
|
||||
return;
|
||||
}
|
||||
var o_desk = o_room.o_desk;
|
||||
var paiju = o_desk.method.CurrAset();
|
||||
if (paiju.benju ==1) {
|
||||
return;
|
||||
}
|
||||
//保存收包
|
||||
o_desk.debug.save_receivepack(pack, seat, playerid);
|
||||
paiju.tuoguan[seat] = tuoguan;
|
||||
if (seat == paiju.control) {
|
||||
//关闭定时器
|
||||
clearTimeout(o_room.o_desk.timer.dapai);
|
||||
if(tuoguan == 1){
|
||||
o_room.o_desk.timer.dapai = setTimeout(o_room.o_desk.method.guanpai_dapai,2000);
|
||||
}
|
||||
}
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = "guanpai";
|
||||
msg.rpc = 'tuoguan';
|
||||
msg.data = {};
|
||||
msg.data.tuoguan = paiju.tuoguan[seat];
|
||||
o_room.method.sendpack_toseat(msg, seat);
|
||||
}
|
||||
114
codes/games/server/games/Guanpai/timer.js
Normal file
114
codes/games/server/games/Guanpai/timer.js
Normal file
@@ -0,0 +1,114 @@
|
||||
var cls_guanpai_timer = cls_guanpai_timer ||{
|
||||
|
||||
dapai : function(o_room){
|
||||
var paiju = o_room.o_desk.method.CurrAset();
|
||||
var o_desk = o_room.o_desk;
|
||||
var seat = paiju.control;
|
||||
paiju.tuoguan[seat] = 1;
|
||||
var laizi_bian = [];
|
||||
if (!paiju.paixing) {//如果是第一个出牌 出最小的牌
|
||||
if (paiju.chuntian[seat] == 2 && o_desk.data.people == 3) {
|
||||
var dq_dapai = [paiju.xianchu];
|
||||
}else{
|
||||
var dq_dapai = [paiju.pai[seat][paiju.pai[seat].length-1]];
|
||||
}
|
||||
|
||||
guanpai_dapai(o_room, dq_dapai , seat ,dq_dapai ,laizi_bian);
|
||||
}else if(paiju.paixing && paiju.tishipai.length>0){//如果跟着出的 出可以出的最小的
|
||||
var dq_dapai = paiju.tishipai[0];
|
||||
if (o_room.o_desk.data.laizi ) {
|
||||
for (var i = 0; i < dq_dapai.length; i++) {
|
||||
if ((dq_dapai[i]%13) +1 == paiju.laizi &&dq_dapai.length != 1 ) {
|
||||
var pass = -1;
|
||||
guanpai_buyao(o_room, pass , seat);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
//上家是3张带牌
|
||||
if (paiju.paixing[0][0] == 3 && paiju.paixing[ 0][1]>=1 && paiju.zuidapai.length!=paiju.paixing[0][0]*paiju.paixing[0][1]) {
|
||||
|
||||
//将牌id列表转换成牌对象列表
|
||||
dq_dapai = cls_guanpai_aset.CardIdsToCards(paiju, dq_dapai);
|
||||
//排序
|
||||
dq_dapai = cls_guanpai_card.SortCardList(dq_dapai);
|
||||
//获取牌型
|
||||
var paixing = cls_guanpai_card.GetMaxCardTypeByCardList(dq_dapai , 0);
|
||||
dq_dapai = cls_guanpai_aset.CardsToCardIds(dq_dapai);
|
||||
if(paixing[0][0] == 3 && paixing[0][1]>=1 ){
|
||||
if (paiju.pai[seat].length>=paixing[0][1]*5) {//牌够
|
||||
//提示牌 牌
|
||||
var dan = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,不拆牌,取所有情况] 起始牌
|
||||
[1,1], [0,0,0,0], null ,null);
|
||||
if (dan.length >= paixing[0][1] *2) {//单张够
|
||||
for (var i = 0; i < paixing[0][1] *2; i++) {
|
||||
dan[i] = cls_guanpai_aset.CardsToCardIds(dan[i]);
|
||||
dq_dapai.push(dan[i][0]);
|
||||
}
|
||||
}else{//单牌不够 取炸弹
|
||||
//将牌id列表转换成牌对象列表
|
||||
paiju.tishipai[paiju.tishipai.length-1] = cls_guanpai_aset.CardIdsToCards(paiju, paiju.tishipai[paiju.tishipai.length-1]);
|
||||
//排序
|
||||
paiju.tishipai[paiju.tishipai.length-1] = cls_guanpai_card.SortCardList(paiju.tishipai[paiju.tishipai.length-1]);
|
||||
var zha_paixing = cls_guanpai_card.GetMaxCardTypeByCardList(paiju.tishipai[paiju.tishipai.length-1] , 0);
|
||||
//将牌对象列表转换成牌id列表
|
||||
var dapai = cls_guanpai_aset.CardsToCardIds(paiju.tishipai[paiju.tishipai.length-1]);
|
||||
//判断是否能出
|
||||
var put = cls_guanpai_suanfa.dapai_guanpai(dapai,zha_paixing[0],paiju.pai[seat].length - dapai.length,zha_paixing[1][0][4],zha_paixing[1][zha_paixing[1].length-1][4],paiju.people , paiju.paixing);
|
||||
|
||||
zha_paixing[0] = put[1];
|
||||
put = put[0];
|
||||
if (put) {
|
||||
if (zha_paixing[0][0] == 4 && zha_paixing[0][1] == 1) {//是炸弹
|
||||
dq_dapai = dapai;
|
||||
}else{//不是炸弹
|
||||
var dan = cls_guanpai_card.GetCardListByCardTypeA(cls_guanpai_card.SortCardList(cls_guanpai_aset.GetCardsInhand(paiju,paiju.control),[0,0]),
|
||||
// 牌的类型 [所有可能,小到大,不拆牌,取所有情况] 起始牌
|
||||
[1,1], [0,0,0,0], null ,null);
|
||||
|
||||
for (var i = 0; i < dan.length; i++) {
|
||||
dan[i] = cls_guanpai_aset.CardsToCardIds(dan[i]);
|
||||
dq_dapai.push(dan[i][0]);
|
||||
daipai++;
|
||||
}
|
||||
if (daipai<paixing[0][1]*2) {
|
||||
for (var i = paiju.pai[seat].length-1; i > 0; i--) {
|
||||
for (var j = 0; j < dq_dapai.length; j++) {
|
||||
if (dq_dapai[j]==paiju.pai[seat][i]) {
|
||||
j=-1
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j == dq_dapai.length) {
|
||||
dq_dapai.push(paiju.pai[seat][i]);
|
||||
daipai++;
|
||||
if (daipai == paixing[0][1]*2){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}else{//牌不够
|
||||
dq_dapai = paiju.pai[seat];
|
||||
}
|
||||
}
|
||||
}
|
||||
guanpai_dapai(o_room, dq_dapai , seat ,dq_dapai ,laizi_bian);
|
||||
|
||||
}else if (paiju.tishipai.length == 0){//如果出不了 就不要
|
||||
var pass = -1;
|
||||
guanpai_buyao(o_room, pass , seat);
|
||||
}
|
||||
},
|
||||
buyao : function(o_room){
|
||||
var paiju = o_room.o_desk.method.CurrAset();
|
||||
var seat = paiju.control;
|
||||
var pass = -2;
|
||||
guanpai_buyao(o_room, pass , seat);
|
||||
}
|
||||
}
|
||||
4
codes/games/server/games/gamehall/class.const.js
Normal file
4
codes/games/server/games/gamehall/class.const.js
Normal file
@@ -0,0 +1,4 @@
|
||||
/*
|
||||
bingo
|
||||
*/
|
||||
|
||||
4
codes/games/server/games/gamehall/class.data.js
Normal file
4
codes/games/server/games/gamehall/class.data.js
Normal file
@@ -0,0 +1,4 @@
|
||||
/*
|
||||
bingo
|
||||
*/
|
||||
|
||||
839
codes/games/server/games/gamehall/class.desk.js
Normal file
839
codes/games/server/games/gamehall/class.desk.js
Normal file
@@ -0,0 +1,839 @@
|
||||
///////////////////////////////////////////////////
|
||||
/////////////// bingo_cls_desk: 牌桌基础类 //////////////
|
||||
///////////////////////////////////////////////////
|
||||
var bingo_cls_desk = bingo_cls_desk || {
|
||||
|
||||
//创建单个牌桌实例
|
||||
new: function(o_room){
|
||||
/*
|
||||
参数说明:
|
||||
o_room 牌桌对应的房间对象
|
||||
|
||||
补充说明:
|
||||
1,房间对象由框架负责创建和释放。
|
||||
2,房间对象管理的是人,解决诸如谁在房间里,谁在哪个位置上,谁进了房间,谁离开了房间等问题。
|
||||
3,牌桌对象由游戏负责创建,牌桌对象会随着房间的释放而释放,子游戏不用管牌桌的释放。
|
||||
4,牌桌对象管理的是牌,解决诸如哪个位置上发了什么牌,出了什么牌等问题。
|
||||
5,此牌桌类是基础牌桌类,各子游戏需要在继承此基础类的情况下编写自己的牌桌类。
|
||||
*/
|
||||
var desk = {};
|
||||
|
||||
//牌桌与房间互挂
|
||||
o_room.o_desk = desk; //可通过房间对象的o_desk属性访问牌桌对象
|
||||
desk.o_room = o_room; //可通过牌桌对象的o_desk属性访问房间对象
|
||||
|
||||
//数据
|
||||
desk.data = {}; //要求data必须是纯数据,不能在data下面写方法、函数、定时器
|
||||
desk.data.gameConfig = [-1,-1,-1,-1,-1,0];//0->开奖总球数、1->彩票球个数、2->每人最多可买几注3->开球倒计时 4->下注时间 5->显示的最小中球数
|
||||
|
||||
|
||||
desk.data.prizeList = [];//中奖信息[[中球数,中球人数],......]
|
||||
desk.data.luckyBallList = [];//已开出幸运球号码、二维数组[开球时间,开球号码]
|
||||
desk.data.allBalls = [];//所有开球号码
|
||||
// desk.data.runTimerId = null;//开球计时器
|
||||
desk.data.sysConfig = null;//json里都有game_config
|
||||
desk.data.balanceList = [];//每局的结算包
|
||||
desk.data.set = 0;//第几局
|
||||
desk.data.setCount = 1;//总局数
|
||||
|
||||
desk.data.multiple = 1;//倍数
|
||||
desk.data.jackPot = 0;//奖池
|
||||
desk.data.prizeCount = 0;//总共多少注中奖
|
||||
desk.data.prizeScore = 0;//每注多少奖励
|
||||
desk.data.playerScoreList = [];//小局玩家积分
|
||||
// desk.data.prepaerList = [];//玩家准备状态
|
||||
desk.data.stage = 0;// 0->未开战 1->开战未下注阶段 2->下注阶段3->开奖阶段 4->结算阶段
|
||||
desk.data.timeStamp = 0;//倒计时终止时间
|
||||
|
||||
|
||||
//定时器
|
||||
desk.timer = {}; //可根据实际需要在desk.timer下定义多个定时器
|
||||
|
||||
desk.timer.runTimerId = null;//开球计时器
|
||||
//收发包
|
||||
desk.pack = []; //调试状态下记录牌桌的收包发包情况
|
||||
//流程方法
|
||||
desk.flow = {};
|
||||
//算法方法
|
||||
desk.arith = {};
|
||||
|
||||
//////////在下面定义实例的属性
|
||||
//数据-小局列表
|
||||
desk.data.asetlist = []; //每开一小局则往该数组中添加一个aset小局对象,[aset, aset, aset, ...], [{}, {}, {}, ...], [[], [], [], ...],数组长度即可表示当前是第几小局,数组最后一个小局对象即是当前小局
|
||||
|
||||
|
||||
/////////在下面定义实例的方法,要求实例的方法必须调用类的方法,以节省内存资源,要求实例的方法名要与类的方法名保持一致
|
||||
//记录游戏的收包情况(不包括框架的收包),要求前端向服务器发包时根据配置参数的设置情况将前端内存数据一起发上来,数据放在pack.data.d里面,服务器收到包后必须调用该方法
|
||||
desk.flow.save_receivepack = function(pack, seat, playerid){
|
||||
return bingo_cls_desk.save_receivepack(desk, pack, seat, playerid);
|
||||
}
|
||||
//记录游戏的发包情况(不包括框架的发包),要求服务器向前端发包后一定要调用该方法
|
||||
desk.flow.save_sendpack = function(pack, seat, playerid){
|
||||
return bingo_cls_desk.save_sendpack(desk, pack, seat, playerid);
|
||||
}
|
||||
//将当前小局的收发包情况保存成TXT
|
||||
desk.flow.save_pack_curraset = function(callback_succ, callback_fail){
|
||||
return bingo_cls_desk.save_pack_curraset(desk, callback_succ, callback_fail);
|
||||
}
|
||||
//输出日志
|
||||
desk.flow.save_log = function(dir, file, log){
|
||||
return bingo_cls_desk.save_log(desk, dir, file, log);
|
||||
}
|
||||
//清日志
|
||||
desk.flow.clear_log = function(dir, file){
|
||||
return bingo_cls_desk.clear_log(desk, dir, file);
|
||||
}
|
||||
//获取当前小局对象
|
||||
desk.flow.get_curraset = function(){
|
||||
return bingo_cls_desk.get_curraset(desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//获取当前小局局数
|
||||
desk.flow.get_currasetnum = function(){
|
||||
return bingo_cls_desk.get_currasetnum(desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
|
||||
|
||||
|
||||
//设置桌数据
|
||||
desk.flow.setDeskData = function(roomtype,_sysConfig,o_desk){
|
||||
return bingo_cls_desk.setDeskData(roomtype,_sysConfig,o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//返回桌数据
|
||||
desk.flow.returnDeskInfo = function(o_desk){
|
||||
return bingo_cls_desk.returnDeskInfo(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//初始化牌桌数据
|
||||
desk.flow.initDesk = function(o_desk){
|
||||
return bingo_cls_desk.initDesk(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//所有玩家是否准备
|
||||
desk.flow.isAllPrepare = function(o_desk){
|
||||
return bingo_cls_desk.isAllPrepare(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//获取玩家准备状态列表
|
||||
desk.flow.getPlayerPrepareList = function(o_desk){
|
||||
return bingo_cls_desk.getPlayerPrepareList(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//开战
|
||||
desk.flow.makewar = function(o_room,_sysConfig){
|
||||
return bingo_cls_desk.makewar(o_room,_sysConfig); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//获得开球列表
|
||||
desk.flow.getLuckyBallList = function(o_desk){
|
||||
return bingo_cls_desk.getLuckyBallList(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//统计房间中奖信息
|
||||
desk.flow.countPrizeList = function(o_desk){
|
||||
return bingo_cls_desk.countPrizeList(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//给其他玩家发
|
||||
desk.flow.sendpack_toother = function(_rpc,_data,seat,_state,_message,o_desk){
|
||||
return bingo_cls_desk.sendpack_toother(_rpc,_data,seat,_state,_message,o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//给某个玩家发
|
||||
desk.flow.sendpack_toseat = function(_rpc,_data,seat,_state,_message,o_desk){
|
||||
return bingo_cls_desk.sendpack_toseat(_rpc,_data,seat,_state,_message,o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//开始新一轮游戏
|
||||
desk.flow.newRound = function(o_desk){
|
||||
return bingo_cls_desk.newRound(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//结束该轮游戏
|
||||
desk.flow.finishRound = function(o_desk){
|
||||
return bingo_cls_desk.finishRound(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//小局结算包
|
||||
desk.flow.singleBalancePack = function(o_desk){
|
||||
return bingo_cls_desk.singleBalancePack(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//大局结算包
|
||||
desk.flow.balancePack = function(o_desk){
|
||||
return bingo_cls_desk.balancePack(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//开球
|
||||
desk.flow.runLottory = function(o_desk){
|
||||
return bingo_cls_desk.runLottory(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//玩家下注
|
||||
desk.flow.makeTicket = function(_msg,o_desk){
|
||||
return bingo_cls_desk.makeTicket(_msg,o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//停止玩家下注
|
||||
desk.flow.finishMakeTicket = function(o_desk){
|
||||
return bingo_cls_desk.finishMakeTicket(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//玩家准备
|
||||
desk.flow.playerPrepare = function(o_desk){
|
||||
return bingo_cls_desk.playerPrepare(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//获取战绩1内容用来保存
|
||||
desk.flow.getGameinfo1 = function(o_desk){
|
||||
return bingo_cls_desk.getGameinfo1(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//获取战绩2内容用来保存
|
||||
desk.flow.getGameinfo2 = function(o_desk){
|
||||
return bingo_cls_desk.getGameinfo2(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
//获得解散数据包
|
||||
desk.flow.breakRoom = function(o_desk){
|
||||
return bingo_cls_desk.breakRoom(o_desk); //必须调用类的方法,且需要将实例对象作为参数传入类方法,这里只能写一句代码
|
||||
}
|
||||
return desk;
|
||||
},
|
||||
|
||||
////////////以下都是类的方法,要求所有的逻辑算法全部都要用类方法来实现
|
||||
//记录收包情况
|
||||
save_receivepack: function(o_desk, pack, seat, playerid){
|
||||
try{
|
||||
if (o_desk.o_room.o_game.method.isdebugger()){ //如果是调试状态下,则记录收包情况
|
||||
var o_save = {};
|
||||
o_save.time = min_now(); //时间
|
||||
o_save.type = 0; //收包
|
||||
o_save.seat = seat; //位置
|
||||
o_save.playerid = playerid; //玩家id
|
||||
o_save.data = {};
|
||||
//前端内存数据
|
||||
o_save.data.client = pack.data.d;
|
||||
//服务器房间内存数据
|
||||
o_save.data.room = o_desk.o_room.method.get_roominfo();
|
||||
//服务器牌桌内存数据
|
||||
o_save.data.desk = min_copyjson(o_desk.data);
|
||||
for (var i = 0; i < o_save.data.desk.asetlist.length; i++) {
|
||||
if (i < o_save.data.desk.asetlist.length - 1){
|
||||
o_save.data.desk.asetlist[i] = null;
|
||||
};
|
||||
};
|
||||
delete pack.data.d;
|
||||
//接收到的数据包
|
||||
o_save.pack = pack;
|
||||
o_desk.pack.push(o_save);
|
||||
}
|
||||
}catch(e){};
|
||||
},
|
||||
//记录发包情况
|
||||
save_sendpack: function(o_desk, pack, seat, playerid){
|
||||
try{
|
||||
if (o_desk.o_room.o_game.method.isdebugger()){ //如果是调试状态下,则记录发包情况
|
||||
var o_save = {};
|
||||
o_save.time = min_now(); //时间
|
||||
o_save.type = 1; //发包
|
||||
o_save.seat = seat; //位置
|
||||
o_save.playerid = playerid; //玩家id
|
||||
o_save.data = {};
|
||||
//服务器房间内存数据
|
||||
o_save.data.room = o_desk.o_room.method.get_roominfo();
|
||||
//服务器牌桌内存数据
|
||||
o_save.data.desk = min_copyjson(o_desk.data);
|
||||
for (var i = 0; i < o_save.data.desk.asetlist.length; i++) {
|
||||
if (i < o_save.data.desk.asetlist.length - 1){
|
||||
o_save.data.desk.asetlist[i] = null;
|
||||
};
|
||||
};
|
||||
//发送的数据包
|
||||
o_save.pack = pack;
|
||||
o_desk.pack.push(o_save);
|
||||
}
|
||||
}catch(e){};
|
||||
},
|
||||
//将当前小局的收发包情况保存成TXT
|
||||
save_pack_curraset: function(o_desk, callback_succ, callback_fail){
|
||||
try{
|
||||
if (o_desk.o_room.o_game.method.isdebugger()){
|
||||
for (var i = 0; i < o_desk.pack.length; i++) {
|
||||
o_desk.pack[i].saveflag = 1;
|
||||
};
|
||||
|
||||
var o_makewartime = new Date(o_desk.o_room.makewartime);
|
||||
var yyyy = o_makewartime.getFullYear();
|
||||
var mm = o_makewartime.getMonth() + 1;
|
||||
var dd = o_makewartime.getDate();
|
||||
var dir = yyyy + "-" + mm + "-" + dd;
|
||||
var file = o_desk.o_room.o_game.o_agent.agentid + "-" + o_desk.o_room.o_game.gameid + "-" + o_desk.o_room.roomcode + "-" + o_desk.flow.get_currasetnum() + ".txt";
|
||||
var data = JSON.stringify(o_desk.pack);
|
||||
|
||||
var cfg = {};
|
||||
// cfg.url = "http://120.26.52.206:8080/debug.php";
|
||||
cfg.url = "http://10.117.216.66:8080/debug.php";
|
||||
cfg.data = "dir=" + dir + "&file=" + file + "&data=" + data;
|
||||
cfg.type = "POST";
|
||||
cfg.success = function(str){
|
||||
for (var i = 0; i < o_desk.pack.length; i++) {
|
||||
if (o_desk.pack[i].saveflag){
|
||||
o_desk.pack.splice(i, 1);
|
||||
i--;
|
||||
};
|
||||
};
|
||||
if(callback_succ){
|
||||
callback_succ();
|
||||
};
|
||||
};
|
||||
cfg.error = function(str){
|
||||
for (var i = 0; i < o_desk.pack.length; i++) {
|
||||
if (o_desk.pack[i].saveflag){
|
||||
delete o_desk.pack[i].saveflag;
|
||||
};
|
||||
};
|
||||
console.log(min_now() + " 保存牌局调试数据失败1");
|
||||
console.log("dir=" + dir);
|
||||
console.log("file=" + file);
|
||||
console.log(str);
|
||||
if(callback_fail){
|
||||
callback_fail();
|
||||
};
|
||||
};
|
||||
min_http(cfg);
|
||||
}
|
||||
}catch(e){
|
||||
console.log(min_now() + " 保存牌局调试数据失败2");
|
||||
console.log("dir=" + dir);
|
||||
console.log("file=" + file);
|
||||
console.log(e);
|
||||
};
|
||||
},
|
||||
//输出日志
|
||||
save_log: function(o_desk, dir, file, log){
|
||||
try{
|
||||
var cfg = {};
|
||||
// cfg.url = "http://120.26.52.206:8080/savelog.php";
|
||||
cfg.url = "http://10.117.216.66:8080/savelog.php";
|
||||
cfg.data = "dir=" + dir + "&file=" + file + "&data=" + log;
|
||||
cfg.type = "POST";
|
||||
cfg.success = function(str){};
|
||||
cfg.error = function(str){
|
||||
console.log(min_now() + " 输出日志失败:" + dir + "/" + file);
|
||||
console.log(str);
|
||||
};
|
||||
min_http(cfg);
|
||||
}catch(e){}
|
||||
},
|
||||
//清日志
|
||||
clear_log: function(o_desk, dir, file){
|
||||
try{
|
||||
var cfg = {};
|
||||
// cfg.url = "http://120.26.52.206:8080/clearlog.php";
|
||||
cfg.url = "http://10.117.216.66:8080/clearlog.php";
|
||||
cfg.data = "dir=" + dir + "&file=" + file;
|
||||
cfg.type = "POST";
|
||||
cfg.success = function(str){};
|
||||
cfg.error = function(str){
|
||||
console.log(min_now() + " 清空日志失败:" + dir + "/" + file);
|
||||
console.log(str);
|
||||
};
|
||||
min_http(cfg);
|
||||
}catch(e){}
|
||||
},
|
||||
//获取当前小局对象
|
||||
get_curraset: function(o_desk){
|
||||
return o_desk.data.asetlist[desk.data.asetlist.length - 1];
|
||||
},
|
||||
//获取当前小局局数
|
||||
get_currasetnum: function(o_desk){
|
||||
return o_desk.data.asetlist.length;
|
||||
},
|
||||
|
||||
setDeskData : function(roomtype,_sysConfig,o_desk){
|
||||
for(var i=0;i<o_desk.data.gameConfig.length;i++){
|
||||
o_desk.data.gameConfig[i] = -1;
|
||||
}
|
||||
switch(roomtype[1]){
|
||||
case 1:
|
||||
o_desk.data.gameConfig[0] = _sysConfig.checkBox2[0][0];
|
||||
o_desk.data.gameConfig[1] = _sysConfig.checkBox2[0][1];
|
||||
o_desk.data.gameConfig[5] = _sysConfig.checkBox2[0][2];
|
||||
break;
|
||||
case 2:
|
||||
|
||||
o_desk.data.gameConfig[0] = _sysConfig.checkBox2[1][0];
|
||||
o_desk.data.gameConfig[1] = _sysConfig.checkBox2[1][1];
|
||||
o_desk.data.gameConfig[5] = _sysConfig.checkBox2[1][2];
|
||||
break;
|
||||
}
|
||||
switch(roomtype[2]){
|
||||
case 1:
|
||||
o_desk.data.gameConfig[2] = _sysConfig.checkBox3[0][0];
|
||||
o_desk.data.gameConfig[3] = _sysConfig.checkBox3[0][1];
|
||||
o_desk.data.gameConfig[4] = _sysConfig.checkBox3[0][2];
|
||||
break;
|
||||
case 2:
|
||||
|
||||
o_desk.data.gameConfig[2] = _sysConfig.checkBox3[1][0];
|
||||
o_desk.data.gameConfig[3] = _sysConfig.checkBox3[1][1];
|
||||
o_desk.data.gameConfig[4] = _sysConfig.checkBox3[1][2];
|
||||
break;
|
||||
}
|
||||
//o_desk.data.playerScoreList.length = o_desk.o_room.seatlist.length;
|
||||
|
||||
},
|
||||
/////////------------返回桌数据----------------/////////
|
||||
returnDeskInfo : function(o_desk){
|
||||
var rValue = {
|
||||
gameConfig:o_desk.data.gameConfig,//0->开奖总球数、1->彩票球个数、2->每人最多可买几注3->开球倒计时4->下注时间
|
||||
|
||||
|
||||
prizeList:o_desk.data.prizeList, //中奖信息[[中球数,中球人数],......]
|
||||
luckyBallList:o_desk.data.luckyBallList, //已开出幸运球号码、二维数组[开球时间,开球号码]
|
||||
allBalls:o_desk.data.allBalls, //所有开球号码
|
||||
// runTimerId:o_desk.timer.runTimerId, //开球计时器
|
||||
|
||||
// balanceList:o_desk.data.balanceList, //每局的结算包
|
||||
set:o_desk.data.set, //第几局
|
||||
setCount:o_desk.o_room.asetcount , //总局数
|
||||
|
||||
multiple:o_desk.data.multiple, //倍数
|
||||
prepareList:o_desk.flow.getPlayerPrepareList(o_desk),
|
||||
PlayerScoreList:o_desk.data.playerScoreList,
|
||||
// jackPot:o_desk.data.jackPot , //奖池
|
||||
// prizeCount:o_desk.data.prizeCount , //总共多少注中奖
|
||||
// prizeScore:o_desk.data.prizeScore , //每注多少奖励
|
||||
|
||||
|
||||
stage:o_desk.data.stage // 0->未开战 1->下注阶段 2->开奖阶段 ->开奖阶段
|
||||
};
|
||||
return rValue;
|
||||
},
|
||||
//----------------初始化牌桌数据-------------/////////
|
||||
initDesk : function(o_desk){
|
||||
o_desk.data.prizeList = [];//中奖信息[[中球数,中球人数],......]
|
||||
o_desk.data.luckyBallList = [];//已开出幸运球号码、二维数组[开球时间,开球号码]
|
||||
//o_desk.data.allBalls = [];//所有开球号码
|
||||
o_desk.timer.runTimerId = null;//开球计时器
|
||||
//o_desk.data.balanceList = [];//每局的结算包
|
||||
// o_desk.data.set = 0;//第几局
|
||||
|
||||
// o_desk.data.multiple = 1;//倍数
|
||||
o_desk.data.jackPot = 0;//奖池
|
||||
o_desk.data.prizeCount = 0;//总共多少注中奖
|
||||
o_desk.data.prizeScore = 0;//每注多少奖励
|
||||
},
|
||||
/////////------------所有玩家是否准备---------------/////////
|
||||
isAllPrepare : function(o_desk){
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
if(o_desk.o_room.seatlist[i].bingoPlayer.Mem.prepare == 0){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
/////////------------获取玩家准备状态列表---------------/////////
|
||||
getPlayerPrepareList : function(o_desk){
|
||||
var rValue =new Array(o_desk.o_room.seatlist.length);
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
rValue[i] = 0;
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
rValue[i] = o_desk.o_room.seatlist[i].bingoPlayer.Mem.prepare;
|
||||
}
|
||||
}
|
||||
return rValue;
|
||||
},
|
||||
///----------------------开战--------------////////////////
|
||||
makewar : function(o_room,_sysConfig){
|
||||
//开战即进入下注阶段
|
||||
o_room.o_desk.data.sysConfig = _sysConfig;
|
||||
o_room.o_desk.flow.setDeskData(o_room.roomtype,_sysConfig,o_room.o_desk);
|
||||
for(var i=0;i<o_room.o_desk.data.playerScoreList.length;i++){
|
||||
o_room.o_desk.data.playerScoreList[i] = 0;
|
||||
}
|
||||
o_room.o_desk.data.stage = 1;
|
||||
o_room.o_desk.data.allBalls = [];
|
||||
for(i=0;i<o_room.o_desk.data.gameConfig[0];i++){
|
||||
o_room.o_desk.data.allBalls.push(i+1);
|
||||
}
|
||||
// o_room.o_desk.data.set = 1;//第几局
|
||||
o_room.o_desk.data.setCount = o_room.o_desk.o_room.asetcount;//总局数
|
||||
var o_room = o_room.o_desk.o_room;
|
||||
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if(o_room.seatlist[i]){
|
||||
o_room.seatlist[i].gameinfo.isbet = 1;
|
||||
o_room.seatlist[i].bingoPlayer = new bingo_Player(o_room.o_desk);
|
||||
o_room.seatlist[i].bingoPlayer.createPlayerData(o_room.o_desk.data.gameConfig[2],o_room.o_desk.data.gameConfig[1]);
|
||||
o_room.seatlist[i].bingoPlayer.okPrepare();
|
||||
}
|
||||
}
|
||||
|
||||
o_room.o_desk.flow.newRound(o_room.o_desk);
|
||||
|
||||
},
|
||||
//---------------获得开球列表-----------//
|
||||
getLuckyBallList : function(o_desk){
|
||||
var rValue = [];
|
||||
for(var i=0;i<o_desk.data.luckyBallList.length;i++){
|
||||
rValue.push(o_desk.data.luckyBallList[i][1]);
|
||||
}
|
||||
return rValue;
|
||||
},
|
||||
//---------------统计房间中奖信息-----------//
|
||||
countPrizeList : function(o_desk){
|
||||
var aryTemp = [];
|
||||
var rValue = [];
|
||||
var o_room = o_desk.o_room;
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if(o_room.seatlist[i]){
|
||||
aryTemp = aryTemp.concat(o_room.seatlist[i].bingoPlayer.Mem.matchCountList);
|
||||
}
|
||||
}
|
||||
for(var i = o_desk.data.gameConfig[5];i <= o_desk.data.gameConfig[1]; i++){
|
||||
var count = 0;
|
||||
aryTemp.forEach(function(element, index, array){
|
||||
if(element == i){
|
||||
count++;
|
||||
}
|
||||
});
|
||||
rValue.unshift([i,count]);
|
||||
}
|
||||
return rValue;
|
||||
},
|
||||
//-------------------给其他玩家发------------///
|
||||
sendpack_toother : function(_rpc,_data,seat,_state,_message,o_desk){
|
||||
var msg = {};
|
||||
if(typeof _state != "undefined"){
|
||||
msg.state = _state;
|
||||
msg.message = _message;
|
||||
}else{
|
||||
msg.state = 0;
|
||||
}
|
||||
msg.app = "youle";
|
||||
msg.route = "bingo";
|
||||
msg.rpc = _rpc;
|
||||
msg.data = _data;
|
||||
o_desk.o_room.method.sendpack_toother(msg, seat);
|
||||
},
|
||||
//-------------------给某个玩家发------------///
|
||||
sendpack_toseat : function(_rpc,_data,seat,_state,_message,o_desk){
|
||||
var msg = {};
|
||||
if(typeof _state != "undefined"){
|
||||
msg.state = _state;
|
||||
msg.message = _message;
|
||||
}else{
|
||||
msg.state = 0;
|
||||
}
|
||||
msg.app = "youle";
|
||||
msg.route = "bingo";
|
||||
msg.rpc = _rpc;
|
||||
msg.data = _data;
|
||||
o_desk.o_room.method.sendpack_toseat(msg, seat);
|
||||
},
|
||||
//-------------------开始新一轮游戏------------///
|
||||
newRound : function(o_desk){
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
o_desk.o_room.seatlist[i].bingoPlayer.initDeskInfo();
|
||||
}
|
||||
}
|
||||
setTimeout(function(){
|
||||
this.data.stage = 2;
|
||||
var data={}
|
||||
this.data.set++;
|
||||
data.gameConfig = this.data.gameConfig;
|
||||
// if(this.data.set == 1){
|
||||
data.set = this.data.set;
|
||||
// }
|
||||
data.setCount = this.o_room.asetcount;
|
||||
data.timeup = new Date().getTime() + this.data.gameConfig[4];
|
||||
data.time = new Date().getTime();
|
||||
this.data.timeStamp = data.timeup;
|
||||
this.flow.sendpack_toother("startMakeTickets",data,-1,0,"",this);
|
||||
}.bind(o_desk),500);
|
||||
setTimeout(function(){
|
||||
this.flow.finishMakeTicket(this);
|
||||
}.bind(o_desk),o_desk.data.gameConfig[4]+500);
|
||||
},
|
||||
//-------------------结束该轮游戏------------///
|
||||
finishRound : function(o_desk){
|
||||
//console.log("开球结束!");
|
||||
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
o_desk.o_room.seatlist[i].bingoPlayer.cancelPrepare();
|
||||
}
|
||||
}
|
||||
|
||||
//console.log("clear 1 timerid:"+o_desk.timer.runTimerId);
|
||||
if(o_desk.timer.runTimerId){
|
||||
clearInterval(o_desk.timer.runTimerId);
|
||||
o_desk.timer.runTimerId = null;
|
||||
}
|
||||
|
||||
o_desk.flow.initDesk(o_desk);
|
||||
},
|
||||
//-----------------小局结算包-----------///
|
||||
singleBalancePack : function(o_desk){
|
||||
var rValue = {};
|
||||
rValue.luckBallsList=o_desk.flow.getLuckyBallList(o_desk);
|
||||
rValue.playerList=[];
|
||||
var prizeCountTemp = 0;
|
||||
var playerPrizeListTemp = [];
|
||||
var o_room = o_desk.o_room;
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
|
||||
if(o_room.seatlist[i]){
|
||||
var _player={};
|
||||
var pCountTemp = 0;
|
||||
var hCountTemp = 0;
|
||||
_player.seat = i;
|
||||
_player.makeTicketsList=[];//玩家投注列表
|
||||
_player.matchTicketState = [];//玩家所投注的中奖信息每注那个位置中奖
|
||||
_player.matchTicketCountList = [];//中球数量
|
||||
_player.makeTicketsList = o_room.seatlist[i].bingoPlayer.Mem.ticketList;
|
||||
for(var j=0;j<o_room.seatlist[i].bingoPlayer.Mem.ticketList.length;j++){
|
||||
var matchTemp = bingo_Util.getMatchIndex(rValue.luckBallsList,o_room.seatlist[i].bingoPlayer.Mem.ticketList[j])
|
||||
_player.matchTicketState.push(bingo_Util.orderList(matchTemp,true));
|
||||
var cTemp = bingo_Util.getMatchCount(rValue.luckBallsList,o_room.seatlist[i].bingoPlayer.Mem.ticketList[j]);
|
||||
_player.matchTicketCountList.push(cTemp);
|
||||
hCountTemp < cTemp ? hCountTemp = cTemp:true;
|
||||
if(cTemp == o_desk.data.gameConfig[1]){//全中
|
||||
pCountTemp++;
|
||||
prizeCountTemp++;
|
||||
}
|
||||
}
|
||||
_player.highCount = [hCountTemp,pCountTemp];
|
||||
// _player.prizeCount = pCountTemp;
|
||||
// _player.count = 10;
|
||||
_player.score = o_room.seatlist[i].bingoPlayer.Mem.score;
|
||||
rValue.playerList.push(_player);
|
||||
}
|
||||
|
||||
}
|
||||
if(prizeCountTemp>0){
|
||||
o_desk.data.prizeScore = Math.floor(o_desk.data.jackPot * o_desk.data.multiple / prizeCountTemp);
|
||||
}else{
|
||||
o_desk.data.prizeScore = o_desk.data.jackPot * o_desk.data.multiple;
|
||||
}
|
||||
var scoreList = [];
|
||||
for(var i=0;i<rValue.playerList.length;i++){
|
||||
o_room.seatlist[rValue.playerList[i].seat].bingoPlayer.Mem.score += o_desk.data.prizeScore * rValue.playerList[i].highCount[1];
|
||||
rValue.playerList[i].score += o_desk.data.prizeScore * rValue.playerList[i].highCount[1];
|
||||
scoreList.push([rValue.playerList[i].seat,o_desk.data.prizeScore * rValue.playerList[i].highCount[1],o_room.seatlist[rValue.playerList[i].seat].bingoPlayer.Mem.score]);
|
||||
}
|
||||
o_desk.data.balanceList.push(rValue);
|
||||
//保存牌局
|
||||
//youle_room.export.backup_room(o_desk.o_room,o_desk.data);
|
||||
//console.log(rValue);
|
||||
return scoreList;
|
||||
|
||||
},
|
||||
//-----------------大局结算包-----------///
|
||||
balancePack : function(o_desk){
|
||||
var rValue = [];
|
||||
// rValue.length = o_desk.o_room.seatlist.length;
|
||||
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
var _player = {};
|
||||
_player.seat = i;
|
||||
_player.score = 0;
|
||||
_player.highCount = [0,0];
|
||||
_player.count = 0;
|
||||
rValue.push(_player);
|
||||
}
|
||||
|
||||
}
|
||||
for(var i=0;i<o_desk.data.balanceList.length;i++){
|
||||
for(var j=0;j<o_desk.data.balanceList[i].playerList.length;j++){
|
||||
// var _player = {};
|
||||
// _player.seat = o_desk.data.balanceList[i].playerList[j].seat;
|
||||
// _player.score = 0;
|
||||
// _player.highCount = [0,0];
|
||||
// _player.count = 0;
|
||||
|
||||
// if(_player.highCount[0] < o_desk.data.balanceList[i].playerList[j].highCount[0]){//最高中球数
|
||||
// _player.highCount = o_desk.data.balanceList[i].playerList[j].highCount;
|
||||
// }
|
||||
|
||||
// _player.count += o_desk.data.balanceList[i].playerList[j].highCount[1];
|
||||
// _player.score += o_desk.data.balanceList[i].playerList[j].score;
|
||||
// rValue.push(_player);
|
||||
if(rValue[o_desk.data.balanceList[i].playerList[j].seat].highCount[0] < o_desk.data.balanceList[i].playerList[j].highCount[0]){//最高中球数
|
||||
rValue[o_desk.data.balanceList[i].playerList[j].seat].highCount = o_desk.data.balanceList[i].playerList[j].highCount;
|
||||
}
|
||||
|
||||
rValue[o_desk.data.balanceList[i].playerList[j].seat].count += o_desk.data.balanceList[i].playerList[j].highCount[1];
|
||||
rValue[o_desk.data.balanceList[i].playerList[j].seat].score += o_desk.data.balanceList[i].playerList[j].score;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return rValue;
|
||||
|
||||
},
|
||||
//获取战绩内容用来保存
|
||||
getGameinfo1 : function(o_desk){
|
||||
var rValue = {};
|
||||
rValue.round = [];
|
||||
rValue.playerlist = [];
|
||||
rValue.roundsum = o_desk.o_room.asetcount;
|
||||
var scoreTemp = [];
|
||||
scoreTemp.length = o_desk.o_room.seatlist.length;
|
||||
for(var i=0;i<scoreTemp.length;i++){
|
||||
scoreTemp[i] = 0;
|
||||
}
|
||||
for(var i=0;i<o_desk.data.balanceList.length;i++){
|
||||
var aryTemp = [];
|
||||
for(var j=0;j<o_desk.data.balanceList[i].playerList.length;j++){
|
||||
|
||||
aryTemp.push([o_desk.data.balanceList[i].playerList[j].seat,o_desk.data.balanceList[i].playerList[j].score]);
|
||||
scoreTemp[o_desk.data.balanceList[i].playerList[j].seat] += o_desk.data.balanceList[i].playerList[j].score;
|
||||
}
|
||||
rValue.round.push(aryTemp);
|
||||
}
|
||||
for(var i=0;i<o_desk.o_room.seatlist.length;i++){
|
||||
var aryTemp = ["","",0];
|
||||
if(o_desk.o_room.seatlist[i]){
|
||||
aryTemp[0]=o_desk.o_room.seatlist[i].nickname;
|
||||
aryTemp[1]=scoreTemp[i];
|
||||
aryTemp[2]=o_desk.o_room.seatlist[i].avatar;
|
||||
|
||||
}
|
||||
rValue.playerlist.push(aryTemp);
|
||||
}
|
||||
return rValue;
|
||||
},
|
||||
//获取战绩内容用来保存
|
||||
getGameinfo2 : function(o_desk){
|
||||
return "";
|
||||
},
|
||||
//----------------------开球-----------------------///
|
||||
runLottory : function(o_desk){
|
||||
var o_room = o_desk.o_room;
|
||||
//console.log(o_room);
|
||||
if(o_desk.data.luckyBallList.length < o_desk.data.gameConfig[0]){
|
||||
var allBall = bingo_Util.filterArray(o_desk.data.allBalls,o_desk.flow.getLuckyBallList(o_desk));
|
||||
var ballID = allBall[ifast_random(allBall.length)];
|
||||
var luckyBall = [new Date().getTime(),ballID];
|
||||
o_desk.data.luckyBallList.push(luckyBall);
|
||||
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if(o_room.seatlist[i]){
|
||||
o_room.seatlist[i].bingoPlayer.updateMatchCountList(o_desk.flow.getLuckyBallList(o_desk));
|
||||
o_room.seatlist[i].bingoPlayer.runLottory(o_desk);
|
||||
}
|
||||
}
|
||||
var plist = o_desk.flow.countPrizeList(o_desk);
|
||||
|
||||
o_desk.data.prizeList = plist;
|
||||
var isBalance = false;
|
||||
var balaceData = {};
|
||||
if(plist[0][1]>0){//有人全中
|
||||
isBalance = true;
|
||||
}
|
||||
if(o_desk.data.luckyBallList.length == o_desk.data.gameConfig[0]){//球全部开完
|
||||
isBalance = true;
|
||||
}
|
||||
var data = {
|
||||
luckyBall:luckyBall,
|
||||
prizeList:plist,
|
||||
timeup:new Date().getTime() + o_desk.data.gameConfig[3]
|
||||
};
|
||||
o_desk.data.timeStamp = data.timeup;
|
||||
if(isBalance){
|
||||
o_desk.data.stage = 4;
|
||||
data.singleBalance = o_desk.flow.singleBalancePack(o_desk);
|
||||
if(o_desk.data.set == o_desk.o_room.asetcount){//大局结束
|
||||
data.balance = o_desk.flow.balancePack(o_desk);
|
||||
}else{
|
||||
//o_desk.data.set++;
|
||||
setTimeout(function(){
|
||||
this.flow.newRound(this);
|
||||
}.bind(o_desk),3000);
|
||||
}
|
||||
o_desk.flow.finishRound(o_desk);
|
||||
// o_desk.data.timeStamp = new Date().getTime() + o_desk.data.gameConfig[4]+1000;
|
||||
o_desk.data.timeStamp = new Date().getTime() + 3000;
|
||||
}
|
||||
//console.log(data);
|
||||
o_desk.flow.sendpack_toother("runLottory",data, -1,0,"",o_desk);
|
||||
if(data.balance){
|
||||
mod_bingo.import.save_grade(o_desk.o_room,o_desk.flow.getGameinfo1(o_desk),o_desk.flow.getGameinfo2(o_desk),1);
|
||||
}
|
||||
}else{
|
||||
//o_desk.flow.finishRound(o_desk);
|
||||
// console.log("clear 2 timerid:"+o_desk.timer.runTimerId);
|
||||
clearInterval(o_desk.timer.runTimerId);
|
||||
o_desk.timer.runTimerId = null;
|
||||
}
|
||||
},
|
||||
//---------------玩家下注---------------------///
|
||||
makeTicket : function(_msg,o_desk){
|
||||
if(o_desk.data.stage == 2){//在下注阶段
|
||||
var o_room = o_desk.o_room;
|
||||
if(o_room.seatlist[_msg.data.seat]){
|
||||
|
||||
for(var i=0;i<_msg.data.ticketsList.length;i++){
|
||||
o_desk.data.jackPot += o_desk.data.multiple;
|
||||
o_room.seatlist[_msg.data.seat].bingoPlayer.changeScore(-o_desk.data.multiple);
|
||||
o_room.seatlist[_msg.data.seat].bingoPlayer.makeTicket(_msg.data.ticketsList[i].ticketID,_msg.data.ticketsList[i].ballList);
|
||||
}
|
||||
var data={}
|
||||
data.score = o_room.seatlist[_msg.data.seat].bingoPlayer.Mem.score;
|
||||
data.ticketsList = _msg.data.ticketsList;
|
||||
o_desk.flow.sendpack_toseat("makeTicket",data,_msg.data.seat,0,"",o_desk);
|
||||
}else{
|
||||
console.log("makeTicket未找到玩家!");
|
||||
}
|
||||
}else{
|
||||
console.log("非下注状态下有玩家下注!");
|
||||
o_desk.flow.sendpack_toseat("makeTicket",{},_msg.data.seat,1,"选号已结束!",o_desk);
|
||||
}
|
||||
},
|
||||
//----------------------停止玩家下注----------------------///
|
||||
finishMakeTicket : function(o_desk){
|
||||
// console.log("停止玩家下注!");
|
||||
o_desk.data.stage = 3;
|
||||
var data = {};
|
||||
data.timeup = new Date().getTime() + o_desk.data.gameConfig[3];
|
||||
var _plist = [];
|
||||
var o_room = o_desk.o_room;
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if(o_room.seatlist[i]){
|
||||
o_room.seatlist[i].bingoPlayer.updateMatchCountList(o_desk.flow.getLuckyBallList(o_desk));
|
||||
o_room.seatlist[i].bingoPlayer.runLottory(o_desk);
|
||||
_plist.push({
|
||||
seat:i,
|
||||
ticketsList:o_room.seatlist[i].bingoPlayer.getTicket()
|
||||
});
|
||||
}
|
||||
}
|
||||
data.playerlist=_plist;
|
||||
o_desk.data.timeStamp = data.timeup;
|
||||
o_desk.flow.sendpack_toother("finishMakeTicket",data,-1,0,"",o_desk);
|
||||
o_desk.timer.runTimerId = setInterval(function(){
|
||||
this.flow.runLottory(o_desk);
|
||||
}.bind(o_desk),o_desk.data.gameConfig[3]);
|
||||
// console.log("timerid:"+o_desk.timer.runTimerId);
|
||||
},
|
||||
//---------------------玩家准备----------------------///
|
||||
playerPrepare : function(_msg,o_desk){
|
||||
console.log("玩家准备");
|
||||
|
||||
},
|
||||
//---------------------结算----------------------///
|
||||
balance : function(o_desk){
|
||||
console.log("结算");
|
||||
|
||||
},
|
||||
//---------------------解散房间----------------------///
|
||||
breakRoom : function(o_desk){
|
||||
console.log("解散");
|
||||
var data={};
|
||||
o_desk.data.stage = 4;
|
||||
data.singleBalance = o_desk.flow.singleBalancePack(o_desk);
|
||||
// if(o_desk.data.set == o_desk.o_room.asetcount){//大局结束
|
||||
data.balance = o_desk.flow.balancePack(o_desk);
|
||||
// }else{
|
||||
// setTimeout(function(){
|
||||
// this.flow.newRound(this);
|
||||
// }.bind(o_desk),3000);
|
||||
// }
|
||||
// o_desk.flow.finishRound(o_desk);
|
||||
// o_desk.data.timeStamp = new Date().getTime() + o_desk.data.gameConfig[4]+1000;
|
||||
//o_desk.data.timeStamp = new Date().getTime() + 3000;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
46
codes/games/server/games/gamehall/class.export.js
Normal file
46
codes/games/server/games/gamehall/class.export.js
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
bingo
|
||||
*/
|
||||
var youle_gamehall_export = youle_gamehall_export || {};
|
||||
|
||||
//获取创建房间所需要的房卡数量
|
||||
youle_gamehall_export.get_needroomcard = function(roomtype,_sysConfig){
|
||||
|
||||
}
|
||||
|
||||
//获取房间局数
|
||||
youle_gamehall_export.get_asetcount = function(roomtype,_sysConfig){
|
||||
|
||||
}
|
||||
|
||||
//获取加入房间时需要的房卡数量
|
||||
youle_gamehall_export.get_needroomcard_joinroom = function(roomtype){
|
||||
|
||||
}
|
||||
//获取房间的开战数据包
|
||||
youle_gamehall_export.makewar = function(o_room,_sysConfig){
|
||||
|
||||
}
|
||||
//获取子游戏的解散数据包
|
||||
youle_gamehall_export.get_disbandRoom = function(o_room){
|
||||
|
||||
}
|
||||
//开战后如果有人中途进入房间
|
||||
youle_gamehall_export.player_enter = function(o_room, seat){
|
||||
|
||||
}
|
||||
//开战后如果有人中途退出房间
|
||||
youle_gamehall_export.player_leave = function(o_room, seat){
|
||||
|
||||
}
|
||||
//当房间已经开战后玩家中途加入房间时,或房间内的玩家断线重连时
|
||||
youle_gamehall_export.get_deskinfo = function(o_room, seat){
|
||||
|
||||
}
|
||||
////恢复牌局 (根据保存的o_room 和 o_room.o_desk.data 新建一局)
|
||||
youle_gamehall_export.restore_room= function(o_room, o_deskinfo){
|
||||
|
||||
}
|
||||
|
||||
mod_gamehall.export = youle_gamehall_export;
|
||||
|
||||
204
codes/games/server/games/gamehall/class.gamemanager.js
Normal file
204
codes/games/server/games/gamehall/class.gamemanager.js
Normal file
@@ -0,0 +1,204 @@
|
||||
function GameMgr(id,_stages){
|
||||
this.id = id;
|
||||
this.stageList = [];
|
||||
this.delayList = [];
|
||||
this.stageIndex = 0;
|
||||
this.stageMtr = -1;
|
||||
this.stage = -1;
|
||||
this.timerId = null;
|
||||
this.stages = _stages;
|
||||
this.stagesList = [];
|
||||
this.stageTime = 0;
|
||||
}
|
||||
GameMgr.prototype.init = function(){
|
||||
this.stageIndex = 0;
|
||||
this.stageMtr = -1;
|
||||
if(this.timerId){
|
||||
window.clearTimeout(this.timerId);
|
||||
this.timerId = null;
|
||||
}
|
||||
}
|
||||
GameMgr.prototype.newStage = function(_stage){
|
||||
this.stage = _stage;
|
||||
this.stageTime = new Date();
|
||||
}
|
||||
GameMgr.prototype.destroy = function(){
|
||||
if(this.timerId){
|
||||
window.clearTimeout(this.timerId);
|
||||
this.timerId = null;
|
||||
}
|
||||
this.stageList = [];
|
||||
this.delayList = [];
|
||||
this.stagesList = [];
|
||||
}
|
||||
GameMgr.prototype.create = function(){
|
||||
this.stagesList = [];
|
||||
for(var i=0;i<this.stages;i++){
|
||||
this.stagesList.push(new window['Stage_'+i](this));
|
||||
}
|
||||
|
||||
}
|
||||
GameMgr.prototype.setConfig = function(_stageList,_delayList){
|
||||
this.stageList = _stageList;
|
||||
this.delayList = _delayList;
|
||||
}
|
||||
|
||||
//GameMgr.prototype.nextStep = function(_msg){
|
||||
//if(this.timerId){
|
||||
//window.clearTimeout(this.timerId);
|
||||
//this.timerId = null;
|
||||
//}
|
||||
//if(this.delayList[this.stageIndex] == 0){
|
||||
|
||||
//if(this.stageIndex>=this.stageList.length){
|
||||
//return;
|
||||
//}
|
||||
//if(this.stageMtr<this.stageIndex){
|
||||
//this.stageMtr = this.stageIndex;
|
||||
//this.stagesList[this.stageList[this.stageIndex]].onTimeOut(_msg);
|
||||
//this.newStage(this.stageIndex);
|
||||
//this.stageIndex++;
|
||||
//this.finishStage(_msg);
|
||||
//}else{
|
||||
//this.stepStage("");
|
||||
//}
|
||||
|
||||
//}else if(this.delayList[this.stageIndex] > 0){
|
||||
//this.timerId = setTimeout(function(){
|
||||
//if(this.stageMtr<this.stageIndex){
|
||||
//if(this.stageIndex>=this.stageList.length){
|
||||
//return;
|
||||
//}
|
||||
//this.stageMtr = this.stageIndex;
|
||||
//this.stagesList[this.stageList[this.stageIndex]].onTimeOut(_msg);
|
||||
//this.newStage(this.stageIndex);
|
||||
//this.stageIndex++;
|
||||
//this.finishStage(_msg);
|
||||
|
||||
//}else{
|
||||
//this.stepStage("");
|
||||
//}
|
||||
//}.bind(this),this.delayList[this.stageIndex]);
|
||||
//}else{
|
||||
|
||||
//}
|
||||
|
||||
//}
|
||||
GameMgr.prototype.nextStep = function(_msg){
|
||||
|
||||
}
|
||||
GameMgr.prototype.checkStep = function(){
|
||||
if(this.stageIndex>=this.stageList.length){
|
||||
return;
|
||||
}
|
||||
|
||||
if(this.delayList[this.stageIndex] == 0){
|
||||
if(this.stageMtr<this.stageIndex){
|
||||
this.stageMtr = this.stageIndex;
|
||||
this.stagesList[this.stageList[this.stageIndex]].onTimeOut();
|
||||
this.newStage(this.stageIndex);
|
||||
this.stageIndex++;
|
||||
this.finishStage();
|
||||
}else{
|
||||
this.stepStage("");
|
||||
}
|
||||
}else if(this.delayList[this.stageIndex] > 0){
|
||||
var deltaTime = new Date() - this.stageTime;
|
||||
if(deltaTime > this.delayList[this.stageIndex]){
|
||||
if(this.stageMtr<this.stageIndex){
|
||||
if(this.stageIndex>=this.stageList.length){
|
||||
return;
|
||||
}
|
||||
this.stageMtr = this.stageIndex;
|
||||
this.stagesList[this.stageList[this.stageIndex]].onTimeOut();
|
||||
this.newStage(this.stageIndex);
|
||||
this.stageIndex++;
|
||||
this.finishStage();
|
||||
|
||||
}else{
|
||||
this.stepStage("");
|
||||
}
|
||||
}
|
||||
}else{
|
||||
|
||||
}
|
||||
}
|
||||
GameMgr.prototype.onGame = function(_msg){
|
||||
this.stageMtr = this.stageIndex;
|
||||
if(this.delayList[this.stageIndex] == -1){
|
||||
this.newStage(this.stageIndex);
|
||||
this.stagesList[this.stageList[this.stageIndex]].onEnter(_msg);
|
||||
this.stageIndex++;
|
||||
if(this.stageIndex>=this.stageList.length){
|
||||
return;
|
||||
}
|
||||
if(this.delayList[this.stageIndex] > -1){
|
||||
this.nextStep(_msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
GameMgr.prototype.finishStage = function(_msg){
|
||||
this.stageMtr = this.stageIndex;
|
||||
if(this.delayList[this.stageIndex]>-1){
|
||||
this.nextStep(_msg);
|
||||
}else{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
GameMgr.prototype.stepStage = function(_msg){
|
||||
this.newStage(this.stageIndex);
|
||||
this.stagesList[this.stageList[this.stageIndex]].onEnter(_msg);
|
||||
this.stageIndex++;
|
||||
if(this.stageIndex>=this.stageList.length){
|
||||
return;
|
||||
}
|
||||
if(this.delayList[this.stageIndex]>-1){
|
||||
this.nextStep(_msg);
|
||||
}
|
||||
|
||||
}
|
||||
GameMgr.prototype.gameStart = function(_msg){
|
||||
this.init();
|
||||
this.stageIndex = 0;
|
||||
this.stageMtr = 0;
|
||||
|
||||
if(this.stageIndex>=this.stageList.length){
|
||||
return;
|
||||
}
|
||||
|
||||
if(this.delayList[this.stageIndex] == 0){
|
||||
this.newStage(this.stageIndex);
|
||||
this.stagesList[this.stageList[this.stageIndex]].onEnter(_msg);
|
||||
this.stageIndex++;
|
||||
if(this.delayList[this.stageIndex]>-1){
|
||||
this.nextStep(_msg);
|
||||
}else{
|
||||
}
|
||||
|
||||
|
||||
}else if(this.delayList[this.stageIndex] > 0){
|
||||
setTimeout(function(){
|
||||
this.newStage(this.stageIndex);
|
||||
this.stagesList[this.stageList[this.stageIndex]].onEnter(_msg);
|
||||
this.stageIndex++;
|
||||
if(this.delayList[this.stageIndex]>-1){
|
||||
this.nextStep(_msg);
|
||||
}else{
|
||||
}
|
||||
|
||||
}.bind(this),this.delayList[this.stageIndex]);
|
||||
}else{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
GameMgr.prototype.doPack = function(_msg){
|
||||
if(this.stage>=this.stageList.length || this.stage < 0){
|
||||
return;
|
||||
}
|
||||
this.stagesList[this.stageList[this.stage]].doPack(_msg);
|
||||
}
|
||||
|
||||
|
||||
23
codes/games/server/games/gamehall/class.import.js
Normal file
23
codes/games/server/games/gamehall/class.import.js
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
bingo
|
||||
*/
|
||||
var youle_bingo_import = youle_bingo_import || {};
|
||||
|
||||
//玩家合法性
|
||||
youle_bingo_import.check_player = function(agentid, gameid, roomcode, seat, playerid, conmode, fromid){
|
||||
return mod_bingo.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, conmode, fromid);
|
||||
}
|
||||
//扣除房卡
|
||||
youle_bingo_import.deduct_roomcard = function(o_room){
|
||||
return mod_bingo.app.youle_room.export.deduct_roomcard(o_room);
|
||||
}//保存战绩
|
||||
youle_bingo_import.save_grade = function(o_room, o_gameinfo1, o_gameinfo2, freeroomflag){
|
||||
mod_bingo.app.youle_room.export.save_grade(o_room, o_gameinfo1, o_gameinfo2, freeroomflag);
|
||||
}
|
||||
//完成任务
|
||||
youle_bingo_import.finish_gametask = function(agentid, o_player, taskid){
|
||||
mod_bingo.app.youle_room.export.finish_gametask(agentid, o_player, taskid);
|
||||
}
|
||||
|
||||
|
||||
mod_bingo.import = youle_bingo_import;
|
||||
4
codes/games/server/games/gamehall/class.logic.js
Normal file
4
codes/games/server/games/gamehall/class.logic.js
Normal file
@@ -0,0 +1,4 @@
|
||||
/*
|
||||
bingo
|
||||
*/
|
||||
var bingo_Logic = bingo_Logic || {};
|
||||
206
codes/games/server/games/gamehall/class.player.js
Normal file
206
codes/games/server/games/gamehall/class.player.js
Normal file
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
bingo
|
||||
*/
|
||||
function bingo_Player(o_desk){
|
||||
this.Mem = {};
|
||||
this.Mem.maxTicket = 0;//最大投注数量
|
||||
this.Mem.ticketCount = 0;//每注选球数量
|
||||
this.Mem.ticketList = [];//投注信息 [.......彩票号码.....]
|
||||
this.Mem.makeTicketState = [];//投注状态
|
||||
this.Mem.matchTicketState = [];//中奖彩票信息0->未中 1->中
|
||||
this.Mem.matchCountList = [];//中奖数
|
||||
this.Mem.score = 0;//积分
|
||||
this.o_desk = o_desk;
|
||||
this.Mem.prepare = 0;//是否准备
|
||||
|
||||
}
|
||||
|
||||
//初始化玩家牌桌信息
|
||||
bingo_Player.prototype.initDeskInfo = function(){
|
||||
for(var i=0;i<this.Mem.ticketList.length;i++){
|
||||
for(var j=0;j<this.Mem.ticketList[i].length;j++){
|
||||
this.Mem.ticketList[i][j] = 0;
|
||||
}
|
||||
}
|
||||
for(var i=0;i<this.Mem.matchTicketState.length;i++){
|
||||
for(var j=0;j<this.Mem.matchTicketState[i].length;j++){
|
||||
this.Mem.matchTicketState[i][j] = 0;
|
||||
}
|
||||
}
|
||||
for(var i=0;i<this.Mem.makeTicketState.length;i++){
|
||||
this.Mem.makeTicketState[i] = 0;
|
||||
|
||||
}
|
||||
for(var i=0;i<this.Mem.matchCountList.length;i++){
|
||||
this.Mem.matchCountList[i] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
//初始化玩家信息
|
||||
bingo_Player.prototype.init = function(){
|
||||
this.Mem.maxTicket = 0;//最大投注数量
|
||||
this.Mem.ticketCount = 0;//每注选球数量
|
||||
this.Mem.ticketList = [];//投注信息 [.......彩票号码.....]
|
||||
this.Mem.makeTicketState = [];//投注状态
|
||||
this.Mem.matchTicketState = [];//中奖彩票信息0->未中 1->中
|
||||
this.Mem.matchCountList = [];//中奖数
|
||||
this.Mem.score = 0;//积分
|
||||
this.Mem.prepare = 0;//是否准备
|
||||
}
|
||||
//初始化玩家信息
|
||||
bingo_Player.prototype.returnPlayerData = function(){
|
||||
var rValue = {
|
||||
maxTicket:this.Mem.maxTicket,//最大投注数量
|
||||
ticketCount:this.Mem.ticketCount,//每注选球数量
|
||||
ticketList:this.Mem.ticketList,//投注信息 [.......彩票号码.....]
|
||||
makeTicketState:this.Mem.makeTicketState,//投注状态
|
||||
matchTicketState:this.Mem.matchTicketState,//中奖彩票信息0->未中 1->中
|
||||
matchCountList:this.Mem.matchCountList,//中奖数
|
||||
score:this.Mem.score//积分
|
||||
};
|
||||
return rValue;
|
||||
}
|
||||
//设置玩家最大投注数量
|
||||
bingo_Player.prototype.setMaxTicket = function(_maxTicket){
|
||||
this.Mem.maxTicket = _maxTicket;
|
||||
}
|
||||
//设置玩家每注选球数量
|
||||
bingo_Player.prototype.setTicketCount = function(_ticketCount){
|
||||
this.Mem.ticketCount = _ticketCount;
|
||||
}
|
||||
//设置玩家投注状态
|
||||
bingo_Player.prototype.setTicketState = function(_ticketIindex,_state){
|
||||
this.Mem.makeTicketState[_ticketIindex] = _state;
|
||||
}
|
||||
//创建玩家信息
|
||||
bingo_Player.prototype.createPlayerData= function(_maxTicket,_ticketCount){
|
||||
this.setMaxTicket(_maxTicket);
|
||||
this.setTicketCount(_ticketCount);
|
||||
this.createTicketList();
|
||||
this.createMatchTicketState();
|
||||
this.createMatchCountList();
|
||||
this.createMakeTicketState();
|
||||
}
|
||||
//创建玩家投注信息列表
|
||||
bingo_Player.prototype.createTicketList = function(){
|
||||
this.Mem.ticketList = [];
|
||||
for(var i=0;i<this.Mem.maxTicket;i++){
|
||||
var ary = [];
|
||||
for(var j=0;j<this.Mem.ticketCount;j++){
|
||||
ary.push(0);
|
||||
}
|
||||
this.Mem.ticketList.push(ary);
|
||||
}
|
||||
}
|
||||
//创建玩家中奖彩票信息
|
||||
bingo_Player.prototype.createMatchTicketState= function(){
|
||||
this.Mem.matchTicketState = [];
|
||||
for(var i=0;i<this.Mem.maxTicket;i++){
|
||||
var ary = [];
|
||||
for(var j=0;j<this.Mem.ticketCount;j++){
|
||||
ary.push(0);
|
||||
}
|
||||
this.Mem.matchTicketState.push(ary);
|
||||
}
|
||||
}
|
||||
//创建玩家中球数量列表
|
||||
bingo_Player.prototype.createMatchCountList= function(){
|
||||
this.Mem.matchCountList.length = this.Mem.maxTicket;
|
||||
for(var i=0;i<this.Mem.maxTicket;i++){
|
||||
this.Mem.matchCountList[i]=0;
|
||||
}
|
||||
}
|
||||
//创建玩家投注状态
|
||||
bingo_Player.prototype.createMakeTicketState= function(){
|
||||
this.Mem.makeTicketState = [];
|
||||
for(var i=0;i<this.Mem.maxTicket;i++){
|
||||
this.Mem.makeTicketState.push(0);
|
||||
}
|
||||
}
|
||||
//更新玩家中奖彩票信息(单注)
|
||||
bingo_Player.prototype.updateMatchTicketStateByIndex= function(_ticketIindex){
|
||||
// var luckball = this.Mem.o_desk.flow.getLuckyBallList();
|
||||
var luckball = this.o_desk.flow.getLuckyBallList(this.o_desk);
|
||||
// for(var i=0;i<bingo_Desk.Mem.luckyBallList.length;i++){
|
||||
// luckball.push(bingo_Desk.Mem.luckyBallList[i][1]);
|
||||
// }
|
||||
var matchIndex = bingo_Util.getMatchIndex(luckball,this.Mem.ticketList[_ticketIindex]);
|
||||
for(var i=0;i<this.Mem.matchTicketState[_ticketIindex].length;i++){
|
||||
this.Mem.matchTicketState[_ticketIindex][i] = 0;
|
||||
}
|
||||
for(var i=0;i<matchIndex.length;i++){
|
||||
this.Mem.matchTicketState[_ticketIindex][matchIndex[i]] = 1;
|
||||
}
|
||||
}
|
||||
//更新玩家中奖彩票信息
|
||||
bingo_Player.prototype.updateMatchTicketState= function(luckball){
|
||||
for(var i=0;i<this.Mem.ticketList.length;i++){
|
||||
this.updateMatchTicketStateByIndex(i);
|
||||
}
|
||||
|
||||
}
|
||||
//更新玩家中球数量列表
|
||||
bingo_Player.prototype.updateMatchCountList= function(_luckBallsList){
|
||||
for(var i=0;i<this.Mem.ticketList.length;i++){
|
||||
this.Mem.matchCountList[i] = bingo_Util.getMatchCount(_luckBallsList,this.Mem.ticketList[i]);
|
||||
}
|
||||
|
||||
}
|
||||
//设置玩家投注号码
|
||||
bingo_Player.prototype.setTicket = function(_ticketIindex,_ticketIDList){
|
||||
for(var i = 0;i < _ticketIDList.length; i++){
|
||||
this.Mem.ticketList[_ticketIindex][i] = _ticketIDList[i];
|
||||
}
|
||||
}
|
||||
//投注
|
||||
bingo_Player.prototype.makeTicket = function(_ticketIindex,_ticketIDList){
|
||||
this.setTicket(_ticketIindex,_ticketIDList);
|
||||
this.setTicketState(_ticketIindex,1);
|
||||
this.updateMatchTicketState();
|
||||
}
|
||||
//获得玩家投注状态
|
||||
bingo_Player.prototype.getMakeTicketStateByIndex = function(_ticketIindex){
|
||||
return this.Mem.makeTicketState[_ticketIindex];
|
||||
}
|
||||
//获得玩家投注状态
|
||||
bingo_Player.prototype.getMakeTicketState = function(){
|
||||
return [].concat(this.Mem.makeTicketState);
|
||||
}
|
||||
//获得玩家中奖状态
|
||||
bingo_Player.prototype.getMatchTicketStateByIndex = function(_ticketIindex){
|
||||
return [].concat(this.Mem.matchTicketState[_ticketIindex]);
|
||||
}
|
||||
//获得玩家中奖状态
|
||||
bingo_Player.prototype.getMatchTicketState = function(){
|
||||
return [].concat(this.Mem.matchTicketState);
|
||||
}
|
||||
//获得玩家中奖状态
|
||||
bingo_Player.prototype.getTicketByIndex = function(_ticketIindex){
|
||||
return [].concat(this.Mem.ticketList[_ticketIindex]);
|
||||
}
|
||||
//获得玩家中奖状态
|
||||
bingo_Player.prototype.getTicket = function(){
|
||||
return [].concat(this.Mem.ticketList);
|
||||
}
|
||||
bingo_Player.prototype.runLottory = function(){
|
||||
|
||||
this.updateMatchTicketState();
|
||||
|
||||
}
|
||||
|
||||
//设置积分
|
||||
bingo_Player.prototype.setScore = function(_score){
|
||||
this.Mem.socre = _score;
|
||||
}
|
||||
//更改积分
|
||||
bingo_Player.prototype.changeScore = function(_score){
|
||||
this.Mem.score += _score;
|
||||
}
|
||||
//准备
|
||||
bingo_Player.prototype.okPrepare = function(){
|
||||
this.Mem.prepare = 1;
|
||||
}
|
||||
//取消准备
|
||||
bingo_Player.prototype.cancelPrepare = function(){
|
||||
this.Mem.prepare = 0;
|
||||
}
|
||||
121
codes/games/server/games/gamehall/class.util.js
Normal file
121
codes/games/server/games/gamehall/class.util.js
Normal file
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
bingo
|
||||
*/
|
||||
|
||||
Math.seed = 5;
|
||||
Math.seededRandom = function(max, min) {
|
||||
|
||||
max = max || 1;
|
||||
min = min || 0;
|
||||
Math.seed = (Math.seed * 9301 + 49297) % 233280;
|
||||
var rnd = Math.seed / 233280.0;
|
||||
return Math.round(min + rnd * (max - min));
|
||||
}
|
||||
|
||||
var bingo_Util = bingo_Util || {};
|
||||
|
||||
//从列表中随机出n个数字(不重复)
|
||||
bingo_Util.randomFromList = function(n,_list){
|
||||
var list = [].concat(_list);
|
||||
if(n>list.length){
|
||||
return [];
|
||||
}
|
||||
var result = [];
|
||||
for(var i=0;i<n;i++){
|
||||
var idx = ifast_random(list.length);
|
||||
// var idx = Math.seededRandom(list.length,0) - 1;
|
||||
result.push(list[idx]);
|
||||
list.splice(idx,1);
|
||||
}
|
||||
//return result;
|
||||
return bingo_Util.orderList(result,true);
|
||||
}
|
||||
//排序是否从小到大
|
||||
bingo_Util.orderList = function(_list,_bTemp){
|
||||
var _listTemp = [].concat(_list);
|
||||
if (_listTemp){
|
||||
for (var i = 0; i < _listTemp.length; i++) {
|
||||
for (var j = i + 1; j < _listTemp.length; j++) {
|
||||
switch(_bTemp){
|
||||
case true:
|
||||
if (_listTemp[i] > _listTemp[j]) {
|
||||
var tmp = _listTemp[j];
|
||||
_listTemp[j] = _listTemp[i];
|
||||
_listTemp[i] = tmp;
|
||||
}
|
||||
break;
|
||||
case false:
|
||||
if (_listTemp[i] < _listTemp[j]) {
|
||||
var tmp = _listTemp[j];
|
||||
_listTemp[j] = _listTemp[i];
|
||||
_listTemp[i] = tmp;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
return _listTemp;
|
||||
}
|
||||
//从_list2中找出匹配_list1的位置
|
||||
bingo_Util.getMatchIndex = function(in_list1,in_list2){
|
||||
var _list1 = [].concat(in_list1);
|
||||
var _list2 = [].concat(in_list2);
|
||||
var result=[];
|
||||
for(var i=0;i<_list1.length;i++){
|
||||
var findIndex = _list2.indexOf(_list1[i]);
|
||||
if(findIndex>-1){
|
||||
result.push(findIndex);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
//从_list2中找出匹配_list1的数量
|
||||
bingo_Util.getMatchCount = function(in_list1,in_list2){
|
||||
var _list1 = [].concat(in_list1);
|
||||
var _list2 = [].concat(in_list2);
|
||||
var rValue = 0;
|
||||
for(var i=0;i<_list1.length;i++){
|
||||
var findIndex = _list2.indexOf(_list1[i]);
|
||||
if(findIndex>-1){
|
||||
rValue++;
|
||||
}
|
||||
}
|
||||
return rValue;
|
||||
}
|
||||
//从_list1中删除与_list2相同相同的元素
|
||||
bingo_Util.filterArray = function(in_list1,in_list2){
|
||||
var _list1 = [].concat(in_list1);
|
||||
var _list2 = [].concat(in_list2);
|
||||
var arrtemp = _list1;
|
||||
for(var i=0;i<_list2.length;i++){
|
||||
arrtemp = arrtemp.filter(function(element,index,array){
|
||||
return element != _list2[i];
|
||||
});
|
||||
|
||||
}
|
||||
return arrtemp;
|
||||
}
|
||||
//生成初始化值一致长度确定的数组
|
||||
bingo_Util.createArray = function(_length,_value){
|
||||
var returnValue = new Array(_length);
|
||||
for(var i=0;i<returnValue.length;i++){
|
||||
returnValue[i] = _value;
|
||||
}
|
||||
return returnValue;
|
||||
}
|
||||
//将毫秒转化为分秒
|
||||
bingo_Util.convertToMntSed = function(mss){
|
||||
var seconds = Math.ceil((mss % (1000 * 60)) / 1000);
|
||||
//var minutes = Math.ceil((mss / (1000 * 60 )));
|
||||
var minutes = Math.floor(Math.floor(mss / 1000)/60);
|
||||
return [minutes,seconds];
|
||||
}
|
||||
function ifast_random(b) {
|
||||
return parseInt(Math.random() * b);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
28
codes/games/server/games/gamehall/mod.js
Normal file
28
codes/games/server/games/gamehall/mod.js
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
gamehall
|
||||
*/
|
||||
|
||||
var mod_gamehall = mod_gamehall || cls_mod.new("mod_gamehall", "gamehall", youle_app);
|
||||
|
||||
//工具类
|
||||
//min_loadJsFile("games2/bingo/class.util.js", function(){
|
||||
//逻辑类
|
||||
//min_loadJsFile("games2/bingo/class.logic.js", function(){
|
||||
//牌桌类
|
||||
//min_loadJsFile("games2/bingo/class.desk.js", function(){
|
||||
//对内的输入接口类
|
||||
//min_loadJsFile("games2/bingo/class.import.js", function(){
|
||||
//对内的输出接口类
|
||||
min_loadJsFile("games2/gamehall/class.export.js", function(){
|
||||
//对内的输出接口类
|
||||
//min_loadJsFile("games2/bingo/class.player.js", function(){
|
||||
//对内的输出接口类
|
||||
//min_loadJsFile("games2/bingo/class.gamemanager.js", function(){
|
||||
|
||||
//});
|
||||
//});
|
||||
//});
|
||||
//});
|
||||
//});
|
||||
//});
|
||||
});
|
||||
36
codes/games/server/games/jinxian_mj/Interface/Room.js
Normal file
36
codes/games/server/games/jinxian_mj/Interface/Room.js
Normal file
@@ -0,0 +1,36 @@
|
||||
//
|
||||
mod_jxmj.room=mod_jxmj.room||{}
|
||||
//条拍
|
||||
mod_jxmj.room.adjustCard=function (playerRoom,pos1) {
|
||||
//测试用的玩家手牌
|
||||
|
||||
//playerRoom.hand[0][0] = [7,8,14,41]
|
||||
// playerRoom.hand[1]= [[1, 9, 16, 16, 16, 18, 27],[6, 7, 8],[25, 26, 27]];
|
||||
//playerRoom.hand[0][0] = [5,5,5,17,18,19,24];
|
||||
//playerRoom.hand[0][1] = [1,2,3];
|
||||
//playerRoom.hand[0][2] = [21,22,23];
|
||||
//playerRoom.hand[1][0] = [2,2,2,3,4,4,4,12,12,12,13,14,15];
|
||||
// playerRoom.hand[1][0] = [1,2,2,2,3,3,3,5,5,5,6,6,6];
|
||||
// playerRoom.hand[0][0] = [11,11,11,12,12,12,13,14,14,14,15,15,15];
|
||||
// playerRoom.hand[0] =[[16,15,15,15],[1,1,1],[2,2,2],[3,3,3]];
|
||||
//playerRoom.hand[0][0] = [11,11,11,13,2,2,13,13,14,14,14,15,15];
|
||||
//playerRoom.hand[1][0] = [11,11,11,13,2,2,13,13,14,14,14,15,15];
|
||||
// playerRoom.hand[2][0] = [11,11,11,13,2,2,13,13,14,14,14,15,15];
|
||||
// playerRoom.hand[3][0] = [11,11,11,13,2,2,13,13,14,14,14,15,15];
|
||||
// playerRoom.hand[1][0] = [2,2,2,3,1,1,1,4,4,4,12,12,12];
|
||||
//
|
||||
//playerRoom.poker[pos1+2]=14;
|
||||
//playerRoom.poker[pos1+4]=8;
|
||||
// playerRoom.poker[pos1+1]=15;
|
||||
// playerRoom.poker[pos1+2]=3;
|
||||
//if (playerRoom.config.donot==1&&playerRoom.config.electric==0){//不打牌,无限发
|
||||
// playerRoom.user_ctrl[1]=-1;
|
||||
// playerRoom.user_ctrl[2]=-1;
|
||||
// playerRoom.user_ctrl[3]=-1;
|
||||
// playerRoom.poker[pos1]=1;
|
||||
//}
|
||||
}
|
||||
|
||||
mod_jxmj.room.adjustJing=function (playerRoom) {
|
||||
//playerRoom.jing=[7,8];
|
||||
}
|
||||
2950
codes/games/server/games/jinxian_mj/ai/ai_deal_card.js
Normal file
2950
codes/games/server/games/jinxian_mj/ai/ai_deal_card.js
Normal file
File diff suppressed because it is too large
Load Diff
0
codes/games/server/games/jinxian_mj/ai/ai发牌机器人.txt
Normal file
0
codes/games/server/games/jinxian_mj/ai/ai发牌机器人.txt
Normal file
BIN
codes/games/server/games/jinxian_mj/ai/函数列表.xlsx
Normal file
BIN
codes/games/server/games/jinxian_mj/ai/函数列表.xlsx
Normal file
Binary file not shown.
8
codes/games/server/games/jinxian_mj/algo/algo.js
Normal file
8
codes/games/server/games/jinxian_mj/algo/algo.js
Normal file
@@ -0,0 +1,8 @@
|
||||
min_loadJsFile(mod_jxmj.roots+"algo/algo_hu_base.js", function(){
|
||||
min_loadJsFile(mod_jxmj.roots+"algo/algo_classify.js", function(){
|
||||
min_loadJsFile(mod_jxmj.roots+"algo/algo_hu_wild_card.js", function(){
|
||||
min_loadJsFile(mod_jxmj.roots+"algo/algo_hu12pai.js", function(){
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
198
codes/games/server/games/jinxian_mj/algo/algo_classify.js
Normal file
198
codes/games/server/games/jinxian_mj/algo/algo_classify.js
Normal file
@@ -0,0 +1,198 @@
|
||||
//分类牌
|
||||
mod_jxmj.get_sametype = function (arr, card) {
|
||||
var arr1 = ExArray.copyArray(arr);
|
||||
ExArray.ordArray(arr1);
|
||||
var max = (parseInt(card / 10) + 1) * 10;
|
||||
var min = parseInt(card / 10) * 10;
|
||||
var min_pos = 0, max_pos = 0;
|
||||
var ban = 0;
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
if (ban == 0 && arr1[i] >= min) {
|
||||
min_pos = i;
|
||||
ban = 1;
|
||||
}
|
||||
if (arr1[i] > max) {
|
||||
max_pos = i;
|
||||
ban = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ban == 1) {
|
||||
max_pos = arr1.length;
|
||||
}
|
||||
var arr0 = arr1.slice(min_pos, max_pos);
|
||||
return arr0;
|
||||
}
|
||||
//吃相关
|
||||
mod_jxmj.straight3 = function (arr1, card) {
|
||||
var r = [];
|
||||
var arr2 = [[card - 2, card - 1, card], [card - 1, card, card + 1], [card, card + 1, card + 2]];
|
||||
if(card >= 30 && card < 50 && mod_jxmj.config.eat_zi == 0)
|
||||
{r= [];
|
||||
return r;
|
||||
}
|
||||
//吃风牌
|
||||
if (card >= 30 && card < 40) {
|
||||
var card0 = [];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (31 + i != card) {
|
||||
card0[card0.length] = 31 + i;
|
||||
}
|
||||
}
|
||||
arr2 = [[card, card0[0], card0[1]], [card, card0[0], card0[2]], [card, card0[1], card0[2]]];
|
||||
}
|
||||
var ban = [0, 0, 0];
|
||||
for (var i = 0; i < 3; i++) {
|
||||
for (var j = 0; j < 3; j++) {
|
||||
if (arr2[i][j] != card && arr1.indexOf(arr2[i][j]) == -1) {
|
||||
ban[i] = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < 3; i++) {
|
||||
if (ban[i] == 0) {
|
||||
ExArray.ordArray(arr2[i]);
|
||||
r[r.length] = arr2[i];
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
//KO(相同的数量)
|
||||
//碰杠相关
|
||||
mod_jxmj.same = function (arr1, card) {
|
||||
var n = 0;
|
||||
var arr2 = ExArray.copyArray(arr1);
|
||||
for (var i = 0; i < 3; i++) {
|
||||
var pos = arr2.indexOf(card);
|
||||
if (pos != -1) {
|
||||
arr2.splice(pos, 1);
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
//分类牌
|
||||
mod_jxmj.a.classify = function (arr) {
|
||||
var r = [];
|
||||
r[0] = mod_jxmj.get_sametype(arr, 9);
|
||||
r[1] = mod_jxmj.get_sametype(arr, 19);
|
||||
r[2] = mod_jxmj.get_sametype(arr, 29);
|
||||
r[3] = mod_jxmj.get_sametype(arr, 39);
|
||||
r[4] = mod_jxmj.get_sametype(arr, 49);
|
||||
r[5] = mod_jxmj.get_sametype(arr, 59);
|
||||
return r;
|
||||
}
|
||||
//分类牌,取出一对
|
||||
mod_jxmj.a.classify_Pair = function (arr, jiang) {
|
||||
var r = [];
|
||||
jiang = jiang || 0;
|
||||
var arr1 = ExArray.copyArray(arr);
|
||||
ExArray.ordArray(arr1);
|
||||
var jiangs = [2, 5, 8, 12, 15, 18, 22, 25, 28];
|
||||
for (var k = 0; k < parseInt(arr.length / 2); k++) {
|
||||
if (arr1.length == 0) {
|
||||
break;
|
||||
}
|
||||
var ban = 0;
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
if (arr1[i] == arr1[i + 1] && jiang == 0 || arr1[i] == arr1[i + 1] && jiang == 1 && jiangs.indexOf(arr1[i]) != -1) {
|
||||
r[r.length] = [arr1[i], arr1[i]];
|
||||
var n = 2;
|
||||
for (var j = 2; j < 4; j++) {
|
||||
if (arr1[i] == arr1[i + j]) {
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
arr1.splice(i, n);
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ban == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
//分类牌,取出一对后的牌
|
||||
mod_jxmj.a.classify_un_Pair = function (arr1, jiang) {
|
||||
var arr = ExArray.copyArray(arr1);
|
||||
var r0 = mod_jxmj.a.classify_Pair(arr, jiang);
|
||||
var r = [];
|
||||
ExArray.ordArray(arr);
|
||||
for (var i = 0; i < r0.length; i++) {
|
||||
var pos = arr.indexOf(r0[i][0]);
|
||||
var arr2 = ExArray.copyArray(arr);
|
||||
if (pos != -1) {
|
||||
arr2.splice(pos, 2);
|
||||
}
|
||||
r[r.length] = arr2;
|
||||
}
|
||||
r.jiang = r0;
|
||||
if (r0.length == 0) {
|
||||
r.jiang = 0;
|
||||
r[r.length] = arr1;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
//分类扑克
|
||||
mod_jxmj.class_poker = function (arr) {
|
||||
arr1 = ExArray.copyArray(arr);
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
if (arr1[i] > 13 * 3) {
|
||||
arr1[i] = arr1[i] - 13 * 3;
|
||||
if (arr1[i] == 1) {
|
||||
arr1[i] = 14;
|
||||
}
|
||||
arr1[i] = [arr1[i], i];
|
||||
}
|
||||
else if (arr1[i] > 13 * 2) {
|
||||
arr1[i] = arr1[i] - 13 * 2;
|
||||
if (arr1[i] == 1) {
|
||||
arr1[i] = 14;
|
||||
}
|
||||
arr1[i] = [arr1[i], i];
|
||||
}
|
||||
else if (arr1[i] > 13) {
|
||||
arr1[i] = arr1[i] - 13;
|
||||
if (arr1[i] == 1) {
|
||||
arr1[i] = 14;
|
||||
}
|
||||
arr1[i] = [arr1[i], i];
|
||||
}
|
||||
else {
|
||||
if (arr1[i] == 1) {
|
||||
arr1[i] = 14;
|
||||
}
|
||||
arr1[i] = [arr1[i], i];
|
||||
}
|
||||
}
|
||||
var arr2 = [];
|
||||
var n = 0;
|
||||
arr1.sort(function (a, b) {
|
||||
return b[0] - a[0]
|
||||
});
|
||||
var rr = [];
|
||||
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
for (var j = 2; j <= 14; j++) {
|
||||
if (arr1[i][0] == 16 - j) {
|
||||
arr2[j] = arr2[j] || [];
|
||||
arr2[j][arr2[j].length] = arr[arr1[i][1]];
|
||||
//rr[j]=rr[j] || [];
|
||||
//rr[j][rr[j].length]=arr1[i][0];
|
||||
}
|
||||
}
|
||||
}
|
||||
var r = []
|
||||
for (var i = 0; i <= 14; i++) {
|
||||
if (arr2[i] && arr2[i].length > 0) {
|
||||
r[n] = arr2[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
212
codes/games/server/games/jinxian_mj/algo/algo_hu12pai.js
Normal file
212
codes/games/server/games/jinxian_mj/algo/algo_hu12pai.js
Normal file
@@ -0,0 +1,212 @@
|
||||
/*****************¹«¹²Îļþ****************/
|
||||
|
||||
mod_jxmj.newHu = {};
|
||||
mod_jxmj.newHu.needLai = (
|
||||
function () {
|
||||
function check_Need(array) {
|
||||
var min_array = [];
|
||||
min_array[0] = testCombo_One(copyArray(array));
|
||||
min_array[1] = testCombo_Two(copyArray(array));
|
||||
min_array[2] = testCombo_One(copyArray(array).reverse());
|
||||
min_array[3] = testCombo_Two(copyArray(array).reverse());
|
||||
min_array[4] = testCombo_Three(copyArray(array));
|
||||
min_array[5] = testCombo_Four(copyArray(array));
|
||||
min_array[6] = testCombo_Three(copyArray(array).reverse());
|
||||
min_array[7] = testCombo_Four(copyArray(array).reverse());
|
||||
var min = get_Min(min_array);
|
||||
return min;
|
||||
}
|
||||
|
||||
function testCombo_One(arr) {
|
||||
var need = 0;
|
||||
|
||||
removeShun(arr);
|
||||
removeKe(arr);
|
||||
|
||||
need = removeSpecial(arr, need);
|
||||
need = removeMissOne(arr, need);
|
||||
need = removeDui(arr, need);
|
||||
need = removeSingle(arr, need);
|
||||
|
||||
return need;
|
||||
}
|
||||
|
||||
function testCombo_Two(arr) {
|
||||
var need = 0;
|
||||
|
||||
removeKe(arr);
|
||||
removeShun(arr);
|
||||
|
||||
need = removeSpecial(arr, need);
|
||||
need = removeMissOne(arr, need);
|
||||
need = removeDui(arr, need);
|
||||
need = removeSingle(arr, need);
|
||||
|
||||
return need;
|
||||
}
|
||||
|
||||
function testCombo_Three(arr) {
|
||||
|
||||
var need = 0;
|
||||
|
||||
removeShun(arr);
|
||||
removeKe(arr);
|
||||
|
||||
need = removeSpecial(arr, need);
|
||||
need = removeDui(arr, need);
|
||||
need = removeMissOne(arr, need);
|
||||
need = removeSingle(arr, need);
|
||||
|
||||
return need;
|
||||
}
|
||||
|
||||
function testCombo_Four(arr) {
|
||||
var need = 0;
|
||||
|
||||
removeKe(arr);
|
||||
removeShun(arr);
|
||||
|
||||
need = removeSpecial(arr, need);
|
||||
need = removeDui(arr, need);
|
||||
need = removeMissOne(arr, need);
|
||||
need = removeSingle(arr, need);
|
||||
|
||||
return need;
|
||||
}
|
||||
|
||||
function get_Min(min_array) {
|
||||
min_array.sort(function (a, b) {
|
||||
return a - b;
|
||||
});
|
||||
return min_array[0];
|
||||
}
|
||||
|
||||
function str2arr(str) {
|
||||
var length = str.length;
|
||||
var arr = [];
|
||||
for (let i = 0; i < length; i++) {
|
||||
arr[i] = parseInt(str[i]);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
function removeShun(arr) {
|
||||
var length = arr.length;
|
||||
for (let j = 0; j < length - 2;) {
|
||||
if (arr[j] > 0) {
|
||||
if ((j + 5) < length && arr[j] == 1 && arr[j + 1] == 0 && arr[j + 2] == 1 && arr[j + 3] == 1 && arr[j + 4] == 1 && arr[j + 5] == 1) {
|
||||
arr[j + 3] -= 1;
|
||||
arr[j + 4] -= 1;
|
||||
arr[j + 5] -= 1;
|
||||
}
|
||||
if (arr[j + 1] != 0 && arr[j + 2] != 0 && arr[j] != 0) {
|
||||
arr[j] -= 1;
|
||||
arr[j + 1] -= 1;
|
||||
arr[j + 2] -= 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
function removeKe(arr) {
|
||||
var length = arr.length;
|
||||
for (let j = 0; j < length; j++) {
|
||||
if (arr[j] >= 3) {
|
||||
arr[j] -= 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function removeSpecial(str, need) {
|
||||
var length = str.length;
|
||||
for (let i = 0; i < length - 3; i++) {
|
||||
let count = str[i] + str[i + 1] + str[i + 2] + str[i + 3];
|
||||
if (count == 4) {
|
||||
str[i] = 0;
|
||||
str[i + 1] = 0;
|
||||
str[i + 2] = 0;
|
||||
str[i + 3] = 0;
|
||||
need += 2;
|
||||
}
|
||||
}
|
||||
return need;
|
||||
}
|
||||
|
||||
function removeMissOne(arr, need) {
|
||||
var length = arr.length;
|
||||
for (let j = 0; j < length - 2;) {
|
||||
if (hasValue(arr, j, 3, 2)) {
|
||||
for (let k = 0; k < 3; k++) {
|
||||
if (arr[j + k] > 0) {
|
||||
arr[j + k] -= 1;
|
||||
}
|
||||
}
|
||||
need += 1;
|
||||
continue;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
return need;
|
||||
}
|
||||
|
||||
function removeDui(arr, need) {
|
||||
var length = arr.length;
|
||||
for (let j = 0; j < length; j++) {
|
||||
if (arr[j] == 2) {
|
||||
arr[j] -= 2;
|
||||
need += 1;
|
||||
}
|
||||
}
|
||||
return need;
|
||||
}
|
||||
|
||||
function removeSingle(arr, need) {
|
||||
var length = arr.length;
|
||||
for (let j = 0; j < length; j++) {
|
||||
if (arr[j] > 0) {
|
||||
arr[j] -= 1;
|
||||
need += 2;
|
||||
}
|
||||
}
|
||||
return need;
|
||||
}
|
||||
|
||||
|
||||
function hasValue(array, index, totalnum, neednum) {
|
||||
var length = array.length;
|
||||
if (length < totalnum) {
|
||||
return;
|
||||
}
|
||||
let temp = 0;
|
||||
for (let i = 0; i < totalnum; i++) {
|
||||
if (array[index + i] > 0) {
|
||||
temp++;
|
||||
}
|
||||
}
|
||||
return temp == neednum;
|
||||
}
|
||||
|
||||
function copyArray(array) {
|
||||
var str_Array = JSON.stringify(array);
|
||||
var back_Array = JSON.parse(str_Array);
|
||||
return back_Array;
|
||||
}
|
||||
|
||||
return function (array) {
|
||||
var length = array.length;
|
||||
var card = [0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
var needLai = 0;
|
||||
|
||||
var which_card = -1;
|
||||
for (let i = 0; i < length; i++) {
|
||||
which_card = array[i] % 10;
|
||||
card[which_card - 1] += 1;
|
||||
}
|
||||
|
||||
needLai += check_Need(card);
|
||||
return needLai;
|
||||
}
|
||||
}()
|
||||
);
|
||||
4536
codes/games/server/games/jinxian_mj/algo/algo_hu_base.js
Normal file
4536
codes/games/server/games/jinxian_mj/algo/algo_hu_base.js
Normal file
File diff suppressed because it is too large
Load Diff
1884
codes/games/server/games/jinxian_mj/algo/algo_hu_wild_card.js
Normal file
1884
codes/games/server/games/jinxian_mj/algo/algo_hu_wild_card.js
Normal file
File diff suppressed because it is too large
Load Diff
BIN
codes/games/server/games/jinxian_mj/algo/算法.pdf
Normal file
BIN
codes/games/server/games/jinxian_mj/algo/算法.pdf
Normal file
Binary file not shown.
3
codes/games/server/games/jinxian_mj/algo/算法.txt
Normal file
3
codes/games/server/games/jinxian_mj/algo/算法.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
algo_hu_base胡的基础算法
|
||||
algo_classify胡的相关算法-分类
|
||||
algo_hu_wild_card有百搭牌的胡
|
||||
BIN
codes/games/server/games/jinxian_mj/algo/算法函数列表.xlsx
Normal file
BIN
codes/games/server/games/jinxian_mj/algo/算法函数列表.xlsx
Normal file
Binary file not shown.
53
codes/games/server/games/jinxian_mj/class.export.js
Normal file
53
codes/games/server/games/jinxian_mj/class.export.js
Normal file
@@ -0,0 +1,53 @@
|
||||
///////////////////////////////////////////////////
|
||||
/////// cls_youle_erqiwang_export: 输出接口 ///////
|
||||
///////////////////////////////////////////////////
|
||||
var cls_youle_erqiwang_export = cls_youle_erqiwang_export || {
|
||||
|
||||
new: function() {
|
||||
|
||||
var exp = {};
|
||||
|
||||
//解析roomtype获取开房所需房卡
|
||||
exp.get_needroomcard = function(roomtype){
|
||||
switch (roomtype[0])
|
||||
{
|
||||
case 1:
|
||||
return 1;
|
||||
break;
|
||||
case 2:
|
||||
return 2;
|
||||
break;
|
||||
default:
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//解析roomtype获取总局数
|
||||
exp.get_asetcount = function(roomtype){
|
||||
switch (roomtype[0])
|
||||
{
|
||||
case 1:
|
||||
return 2;
|
||||
break;
|
||||
case 2:
|
||||
return 8;
|
||||
break;
|
||||
default:
|
||||
return 8;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//解散房间
|
||||
exp.get_disbandRoom = function(o_room){
|
||||
var msg = {};
|
||||
return o_room.o_desk.method.curr_paiju().method.get_paiju_account(2, msg);
|
||||
}
|
||||
|
||||
return exp;
|
||||
}
|
||||
}
|
||||
|
||||
//对内输出接口
|
||||
youle_erqiwang.export = cls_youle_erqiwang_export.new();
|
||||
30
codes/games/server/games/jinxian_mj/class.import.js
Normal file
30
codes/games/server/games/jinxian_mj/class.import.js
Normal file
@@ -0,0 +1,30 @@
|
||||
///////////////////////////////////////////////////
|
||||
/////// cls_youle_platform_import: 输入接口 ///////
|
||||
///////////////////////////////////////////////////
|
||||
var cls_youle_erqiwang_import = cls_youle_erqiwang_import || {
|
||||
|
||||
new: function() {
|
||||
|
||||
var imp = {};
|
||||
|
||||
//检查玩家
|
||||
imp.check_player = function(agentid, gameid, roomcode, seat, playerid, conmode, fromid){
|
||||
return youle_erqiwang.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, conmode, fromid);
|
||||
}
|
||||
|
||||
//第一局结算扣除房卡
|
||||
imp.deduct_roomcard = function(o_room){
|
||||
return youle_erqiwang.app.youle_room.export.deduct_roomcard(o_room);
|
||||
}
|
||||
|
||||
//保存战绩
|
||||
imp.save_grade = function(o_room, o_gameinfo1, o_gameinfo2, freeroomflag){
|
||||
youle_erqiwang.app.youle_room.export.save_grade(o_room, o_gameinfo1, o_gameinfo2, freeroomflag);
|
||||
}
|
||||
|
||||
return imp;
|
||||
}
|
||||
}
|
||||
|
||||
// 输入接口
|
||||
youle_erqiwang.import = cls_youle_erqiwang_import.new();
|
||||
178
codes/games/server/games/jinxian_mj/config/config.js
Normal file
178
codes/games/server/games/jinxian_mj/config/config.js
Normal file
@@ -0,0 +1,178 @@
|
||||
//配置数据
|
||||
mod_jxmj.config =
|
||||
{
|
||||
//全部房间的统一配置
|
||||
"card_enum": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29],//所有可能牌的种类
|
||||
"card_zi": [31,32,33,34,41,42,43],//字牌
|
||||
"permit_zi":1,//带字控制
|
||||
"card_hua": [51, 52, 53, 54, 55, 56, 57, 58],//花牌
|
||||
"permit_hua":0,//带花不带花
|
||||
"hand_card_num":13,
|
||||
"pai_num": 136,//牌的數量,決定玩法
|
||||
"eat": 1,//可不可以吃
|
||||
"eat_zi": 1,//吃風牌
|
||||
"zimo": 1,//自摸
|
||||
"dianhu": 1,//允许点胡
|
||||
"jiangma": 0,//奖码
|
||||
"horse": 0,//马1红中 2抚州 3鸟
|
||||
"piao": 0,//飘
|
||||
"light_an": 0,//亮暗杠
|
||||
"chao_host": 0,//1抄庄2烂庄
|
||||
"base_score": [1, 5, 10, 20, 30, 50, 100],
|
||||
"many_hu": 0,//可不可以多人胡
|
||||
"online": 1,//测试同时在线
|
||||
"continue_hu": 0,//自己胡了自己还可以胡
|
||||
"whohu": 1,//先胡的人可以直接胡,不用等後面的人hu
|
||||
"wait_hu":1,//胡牌之後點過,控制權沒有跳過的話不能再胡
|
||||
"remain_card":0,
|
||||
|
||||
"gang_score":1,//杠后马上算分
|
||||
"jinxian": 1,//进贤麻将
|
||||
"nanchang": 0,//南昌麻将
|
||||
}
|
||||
mod_jxmj.roomconfig=function(o_room,playerRoom){
|
||||
playerRoom.config={};//每个房间的配置
|
||||
playerRoom.config.qianghu=o_room.roomtype[15];//每一个房间是否抢杠胡
|
||||
playerRoom.config.pai_num = playerRoom.config.pai_num;
|
||||
if(mod_jxmj.config.permit_zi){
|
||||
playerRoom.config.card_enum = mod_jxmj.config.card_enum.concat(mod_jxmj.config.card_zi);
|
||||
}
|
||||
playerRoom.config.remain_card = mod_jxmj.config.remain_card;
|
||||
|
||||
|
||||
if (mod_jxmj.config.jinxian == 1) {
|
||||
playerRoom.config.gold_zu = 1;//金币场中出
|
||||
|
||||
playerRoom.config.ccchu = 0;
|
||||
playerRoom.config.peng_gang = 1;//碰后不能杠
|
||||
|
||||
playerRoom.config.updown = 0;//上下翻:发完牌之后计算下精,并计分
|
||||
playerRoom.config.smile_to_behind = 0;//回头一笑:取上一局的上精,并计分
|
||||
playerRoom.config.just_a_song = 0;//同一首歌:埋雷基础上,同一值,不同花色的牌也要算分
|
||||
playerRoom.config.bmob = 0;//埋雷:胡牌后显示下精并计分
|
||||
playerRoom.config.electric = -1;//无限放电//固定放电
|
||||
playerRoom.config.donot = 0;//不打牌
|
||||
|
||||
playerRoom.config.king_score = -1//霸王*2//霸王*4//霸王+10
|
||||
playerRoom.config.fast_slow = 1;//快板,慢板
|
||||
playerRoom.config.addPoolJing=0;
|
||||
|
||||
switch (o_room.roomtype[5]) {
|
||||
case 0:
|
||||
playerRoom.config.updown = 0;//上下翻:发完牌之后计算下精,并计分
|
||||
playerRoom.config.just_a_song = 0;//同一首歌:埋雷基础上,同一值,不同花色的牌也要算分
|
||||
playerRoom.config.bmob = 0;//埋雷:胡牌后显示下精并计分
|
||||
playerRoom.config.electric = -1;//无限放电//固定放电
|
||||
break;
|
||||
case 1:
|
||||
playerRoom.config.updown =1;
|
||||
break;
|
||||
case 2:
|
||||
playerRoom.config.bmob =1;
|
||||
break;
|
||||
case 3:
|
||||
playerRoom.config.just_a_song =1;
|
||||
break;
|
||||
case 4:
|
||||
playerRoom.config.electric =0;
|
||||
break;
|
||||
case 5:
|
||||
playerRoom.config.electric =1;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (o_room.roomtype[10]) {
|
||||
case 0:
|
||||
playerRoom.config.smile_to_behind = 0;//回头一笑:取上一局的上精,并计分
|
||||
break;
|
||||
case 1:
|
||||
playerRoom.config.smile_to_behind =1;
|
||||
break;
|
||||
case 2:
|
||||
playerRoom.config.smile_to_behind =2;
|
||||
break;
|
||||
}
|
||||
switch (o_room.roomtype[2]) {
|
||||
case 1:
|
||||
playerRoom.config.king_score = 0//
|
||||
break;
|
||||
case 2:
|
||||
playerRoom.config.king_score = 1//
|
||||
break;
|
||||
case 3:
|
||||
playerRoom.config.king_score = 2//
|
||||
break;
|
||||
}
|
||||
switch (o_room.roomtype[17]) {
|
||||
case 0:
|
||||
playerRoom.config.ccchu = 0//
|
||||
break;
|
||||
case 1:
|
||||
playerRoom.config.ccchu = 1//
|
||||
break;
|
||||
case 2:
|
||||
playerRoom.config.ccchu = 2//
|
||||
break;
|
||||
case 3:
|
||||
playerRoom.config.ccchu = 4//
|
||||
break;
|
||||
}
|
||||
switch (o_room.roomtype[19]) {
|
||||
case 0:
|
||||
playerRoom.config.donot = 0//
|
||||
break;
|
||||
case 1:
|
||||
playerRoom.config.donot = 1//
|
||||
break;
|
||||
}
|
||||
switch (o_room.roomtype[18]) {
|
||||
case 1:
|
||||
playerRoom.config.fast_slow = 1//慢
|
||||
break;
|
||||
case 2:
|
||||
playerRoom.config.fast_slow = 2//快
|
||||
break;
|
||||
}
|
||||
playerRoom.config.offline_robot=0;//离线代打
|
||||
switch (o_room.roomtype[15]) {
|
||||
case 0:
|
||||
playerRoom.config.offline_robot=0;//离线代打
|
||||
break;
|
||||
case 1:
|
||||
playerRoom.config.offline_robot=1;//离线代打
|
||||
break;
|
||||
}
|
||||
switch (o_room.roomtype[7]) {
|
||||
case 1:
|
||||
playerRoom.config.addPoolJing = 1//牌池算精
|
||||
break;
|
||||
case 2:
|
||||
playerRoom.config.addPoolJing = 0//牌池不算精
|
||||
break;
|
||||
}
|
||||
playerRoom.config.online_sbrobot=1;
|
||||
playerRoom.config.online_robot=[30,33];//在线代打时间配置
|
||||
if (playerRoom.config.donot){
|
||||
playerRoom.config.online_robot=[10,13];//在线代打时间配置
|
||||
}
|
||||
if (playerRoom.config.electric!=-1){
|
||||
//无限发电,固定发电不代打
|
||||
playerRoom.config.offline_robot=0;
|
||||
playerRoom.config.online_sbrobot=0;
|
||||
}
|
||||
if (playerRoom.config.offline_robot){//在线代打开启
|
||||
playerRoom.config.online_sbrobot=1;
|
||||
playerRoom.config.online_robot=[30,33];//在线代打时间配置
|
||||
if (playerRoom.config.donot){
|
||||
playerRoom.config.online_robot=[10,13];//在线代打时间配置
|
||||
}
|
||||
}else {
|
||||
playerRoom.config.online_sbrobot=0;
|
||||
playerRoom.config.online_robot=[70,73];
|
||||
}
|
||||
/*console.log(playerRoom.config.updown,playerRoom.config.smile_to_behind,playerRoom.config.just_a_song,
|
||||
playerRoom.config.bmob,playerRoom.config.electric)*/
|
||||
}
|
||||
};
|
||||
min_loadJsFile(mod_jxmj.roots+"config/config_room.js", function () {
|
||||
});
|
||||
688
codes/games/server/games/jinxian_mj/config/config_room.js
Normal file
688
codes/games/server/games/jinxian_mj/config/config_room.js
Normal file
@@ -0,0 +1,688 @@
|
||||
//以下代码在什么时候执行?
|
||||
//在客户端创建房间界面后执行
|
||||
|
||||
//以下代码有什么效果
|
||||
//实现在客户端的各种配置,比如几个人玩、玩几局,还有每个游戏的玩法选择,比如约定玩不玩某种新玩法
|
||||
mod_jxmj.getScoreByGameInfo1 = function (o_room, gameinfo1) {
|
||||
|
||||
};
|
||||
|
||||
mod_jxmj.owner_beanpush = function(roomtype, game_config){
|
||||
//获取创建房间时候设置的房间费
|
||||
var houseType = roomtype[14];
|
||||
var hasBeanFloor = roomtype[21] > 0 && roomtype[22] > 0;
|
||||
if (houseType == 1) {//不是无限局 而且是 选择了金币倍数
|
||||
return roomtype[23];//茶水费
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
||||
//消耗房卡配置
|
||||
mod_jxmj.needroomcard = function (roomtype, game_config) {
|
||||
//获取房间类型所消耗房卡
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[roomtype[6]] || 4;
|
||||
roomtype[4] = roomtype[4] || 1;
|
||||
|
||||
if (roomtype[21]&&roomtype[22]){
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (game_config && game_config.host_card) {
|
||||
roomtype[4] = game_config.host_card;
|
||||
}
|
||||
if (roomtype[4] == 1) { //房主扣卡
|
||||
if (roomtype[1] == 1) {
|
||||
if (game_config && game_config.needroomcard != undefined) {
|
||||
return game_config.needroomcard[0][roomtype[6]];
|
||||
}
|
||||
if(person==2)
|
||||
{
|
||||
return 2;
|
||||
}else if(person==3)
|
||||
{
|
||||
return 3;
|
||||
}else if(person==4)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
return 1;
|
||||
} else if (roomtype[1] == 2) {
|
||||
if (game_config && game_config.needroomcard != undefined) {
|
||||
return game_config.needroomcard[1][roomtype[6]];
|
||||
}
|
||||
if(person==2)
|
||||
{
|
||||
return 4;
|
||||
}else if(person==3)
|
||||
{
|
||||
return 6;
|
||||
}else if(person==4)
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
return 2;
|
||||
} else if (roomtype[1] == 3) {
|
||||
return 3;
|
||||
}
|
||||
} else if (roomtype[4] == 2) { //AA
|
||||
if (roomtype[1] == 1) {
|
||||
if (game_config && game_config.needroomcard != undefined) {
|
||||
return game_config.needroomcard[0][0];
|
||||
}
|
||||
return 1;
|
||||
} else if (roomtype[1] == 2) {
|
||||
if (game_config && game_config.needroomcard != undefined) {
|
||||
return game_config.needroomcard[1][0];
|
||||
}
|
||||
return 2;
|
||||
} else if (roomtype[1] == 3) {
|
||||
return 3;
|
||||
}
|
||||
} else if (roomtype[4] == 3) { //大赢家
|
||||
if (roomtype[1] == 1) {
|
||||
if (game_config && game_config.needroomcard != undefined) {
|
||||
return game_config.needroomcard[0][roomtype[6]];
|
||||
}
|
||||
if(person==2)
|
||||
{
|
||||
return 2;
|
||||
}else if(person==3)
|
||||
{
|
||||
return 3;
|
||||
}else if(person==4)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
return 1;
|
||||
} else if (roomtype[1] == 2) {
|
||||
if (game_config && game_config.needroomcard != undefined) {
|
||||
return game_config.needroomcard[1][roomtype[6]];
|
||||
}
|
||||
if(person==2)
|
||||
{
|
||||
return 4;
|
||||
}else if(person==3)
|
||||
{
|
||||
return 6;
|
||||
}else if(person==4)
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
return 2;
|
||||
} else if (roomtype[1] == 3) {
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
};
|
||||
//消耗房卡配置(只针对中途加入房间的玩家)
|
||||
mod_jxmj.needroomcard_joinroom = function (roomtype, game_config) {
|
||||
//获取中途加入房间玩家所消耗房卡
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[roomtype[6]] || 4;
|
||||
roomtype[4] = roomtype[4] || 1;
|
||||
|
||||
if (roomtype[21]&&roomtype[22]){
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (game_config && game_config.host_card != undefined) {
|
||||
roomtype[4] = game_config.host_card;
|
||||
}
|
||||
if (roomtype[4] == 1) { //房主扣卡
|
||||
// if (roomtype[1] == 1) {
|
||||
// if (game_config && game_config.needroomcard_joinroom != undefined) {
|
||||
// return game_config.needroomcard_joinroom[0][roomtype[6]];
|
||||
// }
|
||||
// return 0;
|
||||
// } else if (roomtype[1] == 2) {
|
||||
// if (game_config && game_config.needroomcard_joinroom != undefined) {
|
||||
// return game_config.needroomcard_joinroom[1][roomtype[6]];
|
||||
// }
|
||||
// return 0;
|
||||
// } else if (roomtype[1] == 3) {
|
||||
// return 0;
|
||||
// }
|
||||
return 0;
|
||||
} else if (roomtype[4] == 2) {
|
||||
if (roomtype[1] == 1) {
|
||||
if (game_config && game_config.needroomcard_joinroom != undefined) {
|
||||
return game_config.needroomcard_joinroom[0][0];
|
||||
}
|
||||
return 1;
|
||||
} else if (roomtype[1] == 2) { //AA
|
||||
if (game_config && game_config.needroomcard_joinroom != undefined) {
|
||||
return game_config.needroomcard_joinroom[1][0];
|
||||
}
|
||||
return 2;
|
||||
} else if (roomtype[1] == 3) { //AA
|
||||
return 3;
|
||||
}
|
||||
} else if (roomtype[4] == 3) { //大赢家
|
||||
if (roomtype[1] == 1) {
|
||||
if (game_config && game_config.needroomcard_joinroom != undefined) {
|
||||
return game_config.needroomcard_joinroom[0][roomtype[6]];
|
||||
}
|
||||
return 2;
|
||||
} else if (roomtype[1] == 2) {
|
||||
if (game_config && game_config.needroomcard_joinroom != undefined) {
|
||||
return game_config.needroomcard_joinroom[1][roomtype[6]];
|
||||
}
|
||||
return 4;
|
||||
} else if (roomtype[1] == 3) {
|
||||
return 6;
|
||||
}
|
||||
}
|
||||
};
|
||||
//扣卡类型
|
||||
mod_jxmj.deduct_roomcard_mode = function (roomtype, game_config) {
|
||||
if (roomtype[4] == 1) {//房主扣卡
|
||||
return 0;
|
||||
} else if (roomtype[4] == 2) {//AA扣卡
|
||||
return 1;
|
||||
} else if (roomtype[4] == 3) {//大赢家扣卡
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
//局数配置
|
||||
mod_jxmj.asetcount = function (roomtype, game_config) {
|
||||
|
||||
if (roomtype[1] == 1) {
|
||||
if (game_config && game_config.asetcount != undefined) {
|
||||
return game_config.asetcount[0];
|
||||
}
|
||||
return 8;
|
||||
} else if (roomtype[1] == 2) {
|
||||
if (game_config && game_config.asetcount != undefined) {
|
||||
return game_config.asetcount[1];
|
||||
}
|
||||
return 16;
|
||||
} else if (roomtype[1] == 3) {
|
||||
return 16;
|
||||
} else {
|
||||
return 6;
|
||||
}
|
||||
};
|
||||
//开战人数配置
|
||||
mod_jxmj.makewar_playercount = function (roomtype, o_game_config) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[roomtype[6]] || 4;
|
||||
return person;
|
||||
};
|
||||
//是否为星星场,返回1为星星场
|
||||
mod_jxmj.createroom_roommode = function (roomtype, game_config) {
|
||||
if (roomtype[14] == 2 || roomtype[13] == 1) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
//roomtype:房间类型,game_config:游戏配置的数据
|
||||
mod_jxmj.createroom_beanfloor = function (roomtype, game_config) {
|
||||
if (roomtype[14] == 1) {
|
||||
if (roomtype[21] > 0 && roomtype[22] > 0) {
|
||||
return roomtype[22];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (roomtype[14] == 2) {
|
||||
return roomtype[16][2];
|
||||
return 0;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
//roomtype:房间类型,game_config:游戏配置的数据
|
||||
mod_jxmj.createroom_beanmult = function (roomtype, game_config) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[roomtype[6]] || 4;
|
||||
|
||||
if (roomtype[14] == 1) {
|
||||
if (roomtype[21] > 0 && roomtype[22] > 0) {
|
||||
return roomtype[21];
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
if (roomtype[14] == 2) {
|
||||
return roomtype[16][1];
|
||||
return 1;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
//玩家中途进入房间
|
||||
mod_jxmj.player_enter = function (o_room, seat) {
|
||||
//o_desk.o_room.infinite
|
||||
var roomcode = o_room.roomcode;//console.log("玩家中途进入房间"+seat+"/"+roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
|
||||
playerRoom.gold_account_lose[seat] = {total:0,lose:0};
|
||||
if(o_room.seatlist[seat])
|
||||
{o_room.seatlist[seat].gameinfo.isprepare = 0;}
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[o_room.roomtype[6]] || 4;
|
||||
var robot_person=0;
|
||||
for(var i=0;i<person;i++)
|
||||
{
|
||||
if(o_room.seatlist[i] && o_room.seatlist[i].isrobot && o_room.seatlist[i].isrobot == 1) {
|
||||
robot_person+=1;
|
||||
}
|
||||
}
|
||||
if(robot_person>=person && o_room.seatlist[seat] && o_room.seatlist[seat].isrobot && o_room.seatlist[seat].isrobot == 1)
|
||||
{mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, seat);
|
||||
playerRoom.robot[seat] = -1;
|
||||
return;
|
||||
}
|
||||
playerRoom.kick_seat[seat]=0;
|
||||
if (!o_room.seatlist[seat].isrobot) {
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (o_room.seatlist[i] && o_room.seatlist[i].isrobot && o_room.seatlist[i].isrobot == 1) {
|
||||
var ran = parseInt(Math.random() * 10);
|
||||
if (ran == 0) {
|
||||
mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, i);
|
||||
playerRoom.robot[i] = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playerRoom.offline_alltimer==-1){
|
||||
var pack = {
|
||||
"app": "youle",
|
||||
"route": 'jinxianmj',
|
||||
"rpc": "sieves",
|
||||
"data": {
|
||||
"agentid": o_room.o_game.o_agent.agentid,
|
||||
"gameid": o_room.o_game.gameid,
|
||||
"roomcode": o_room.roomcode,
|
||||
"seat": 0,
|
||||
}
|
||||
}
|
||||
playerRoom.offline_alltimer=setInterval(mod_jxmj.jxUtil.offline_alltimer,1000,o_room,playerRoom,pack);
|
||||
playerRoom.offlinetime=0;
|
||||
}
|
||||
|
||||
|
||||
clearTimeout(playerRoom.kick_timer[seat]);//清空踢人计时器
|
||||
//console.log(o_room);
|
||||
var ban = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i] && o_room.seatlist[i].isrobot && o_room.seatlist[i].isrobot == 1) {
|
||||
o_room.seatlist[i].gameinfo.isprepare = 1;
|
||||
playerRoom.user_ctrl[4 + i] = 1;
|
||||
playerRoom.robot[i] = 1;
|
||||
ban = 1;
|
||||
}
|
||||
}
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "start";
|
||||
msg.user_ctrl = ExArray.copyArray(playerRoom.user_ctrl);
|
||||
msg.grade = [];
|
||||
for (var j = 0; j < o_room.seatlist.length; j++) {
|
||||
if (o_room.seatlist[j]) {
|
||||
msg.grade[j] = o_room.seatlist[j].bean;
|
||||
}
|
||||
else {
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i] && o_room.seatlist[i].isrobot != 1) {
|
||||
playerRoom.robot[i] = -1;
|
||||
msg.conmode = o_room.seatlist[i].conmode;
|
||||
msg.fromid = o_room.seatlist[i].fromid;
|
||||
if (msg.conmode && msg.fromid) {
|
||||
youle_room.app.SendPack(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[o_room.roomtype[6]] || 4;
|
||||
if (o_room.seatlist[seat].isrobot && o_room.seatlist[seat].isrobot == 1) {
|
||||
o_room.seatlist[seat].gameinfo.isprepare = 1;
|
||||
playerRoom.user_ctrl[4 + seat] = 1;
|
||||
var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "start";
|
||||
msg.user_ctrl = ExArray.copyArray(playerRoom.user_ctrl);
|
||||
msg.grade = [];
|
||||
for (var j = 0; j < o_room.seatlist.length; j++) {
|
||||
if (o_room.seatlist[j]) {
|
||||
msg.grade[j] = o_room.seatlist[j].bean;
|
||||
}
|
||||
else {
|
||||
}
|
||||
}
|
||||
var now_person = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
now_person += 1;
|
||||
msg.conmode = o_room.seatlist[i].conmode;
|
||||
msg.fromid = o_room.seatlist[i].fromid;
|
||||
if (msg.conmode && msg.fromid) {
|
||||
youle_room.app.SendPack(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var ban = 0;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (o_room.seatlist[i] && !o_room.seatlist[i].isrobot && o_room.seatlist[i].gameinfo.isprepare == 0) {
|
||||
ban = 1;
|
||||
}
|
||||
}
|
||||
if (now_person == person && ban == 0) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
o_room.seatlist[i].gameinfo.isprepare = 1;
|
||||
playerRoom.user_ctrl[4 + i] = 1;//准备
|
||||
}
|
||||
}
|
||||
playerRoom.user_ctrl[4 + seat] = 0;
|
||||
o_room.seatlist[seat].gameinfo.isprepare = 0;
|
||||
//console.log(JSON.stringify(mod_jxmj["r" + roomcode].user_ctrl));
|
||||
var pack = {"data": {}};
|
||||
pack.data.agentid = o_room.o_game.o_agent.agentid;
|
||||
pack.data.playerid = o_room.seatlist[seat].playerid;
|
||||
pack.data.gameid = o_room.o_game.gameid;
|
||||
pack.data.roomcode = roomcode;
|
||||
pack.data.seat = seat;
|
||||
pack.conmode = o_room.seatlist[seat].conmode;
|
||||
pack.fromid = o_room.seatlist[seat].fromid;
|
||||
pack.data.ready = 0;
|
||||
//console.log(pack);
|
||||
playerRoom.timer[2] = setInterval(mod_jxmj.ready, 0, pack, o_room);
|
||||
}
|
||||
}
|
||||
else {
|
||||
playerRoom.kick_timer[seat] = setTimeout(mod_jxmj.kickout0, 30 * 1000, o_room, seat);
|
||||
}
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.kick_timer[i]==-1&&o_room.seatlist[i]&&!o_room.seatlist[i].isrobot&& o_room.seatlist[i].gameinfo.isprepare == 0) {
|
||||
playerRoom.kick_timer[i] = setTimeout(mod_jxmj.kickout0, 30 * 1000, o_room, i);
|
||||
}
|
||||
}
|
||||
playerRoom.new_one[seat] = 1;
|
||||
};
|
||||
//玩家中途退出房间
|
||||
mod_jxmj.player_leave = function (o_room, seat) {
|
||||
//console.log("玩家中途退出房间"+seat);
|
||||
var roomcode = o_room.roomcode;
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
playerRoom.robot[seat] = -1;
|
||||
|
||||
playerRoom.gold_account_lose[seat] = {total:0,lose:0};
|
||||
if (playerRoom.addr && playerRoom.addr[seat]) {
|
||||
playerRoom.addr[seat] = [];
|
||||
}
|
||||
if (playerRoom.ip && playerRoom.ip[seat]) {
|
||||
playerRoom.ip[seat] = [];
|
||||
}
|
||||
if (playerRoom.user_ctrl) {
|
||||
playerRoom.user_ctrl[4 + seat] = 0;
|
||||
if (o_room.seatlist[seat]) {
|
||||
o_room.seatlist[seat].gameinfo.isprepare = 0;
|
||||
o_room.seatlist[seat].gameinfo.isbet = 0;
|
||||
}
|
||||
}
|
||||
var nobody=1;
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]&&!o_room.seatlist[i].isrobot){
|
||||
nobody=0;
|
||||
}
|
||||
}
|
||||
if (nobody==1&&playerRoom.offline_alltimer!=-1){
|
||||
clearInterval(playerRoom.offline_alltimer);
|
||||
playerRoom.offline_alltimer=-1;
|
||||
playerRoom.offlinetime=0;
|
||||
if (playerRoom.final_hu[0]>-1){
|
||||
playerRoom.sea=[[],[],[],[]];
|
||||
playerRoom.hand=[[],[],[],[]];
|
||||
playerRoom.final_hu = [-1, [0, 0], -1];//最终胡:座位、胡的牌、胡的类型
|
||||
}
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i] && o_room.seatlist[i].isrobot) {
|
||||
setTimeout(mod_jxmj.kickout3, 0.2 * 1000, o_room, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
clearInterval(playerRoom.timer[0]);//出牌定时器
|
||||
clearInterval(playerRoom.timer[1]);//操作定时器
|
||||
clearInterval(playerRoom.kick_timer[seat]);//清空踢人计时器
|
||||
playerRoom.timer[0]=-1;
|
||||
playerRoom.timer[1]=-1;
|
||||
playerRoom.kick_timer[seat]=-1;
|
||||
};
|
||||
|
||||
|
||||
mod_jxmj.createroom_needprepare=function(roomtype,game_config){
|
||||
return 1;
|
||||
}
|
||||
|
||||
//玩家准备
|
||||
mod_jxmj.player_prepare = function (o_room, seat) {
|
||||
//o_room=o_room1;
|
||||
//console.log("玩家准备"+seat);
|
||||
//console.log(o_room.seatlist[seat]);
|
||||
var roomcode = o_room.roomcode;
|
||||
mod_jxmj[roomcode]=mod_jxmj[roomcode] || {};
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
if (!o_room.makewartime){
|
||||
//普通场玩家准备
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[o_room.roomtype[6]] || 4;
|
||||
playerRoom.whoready=playerRoom.whoready||[0,0,0,0];
|
||||
playerRoom.user_ctrl = playerRoom.user_ctrl || [0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, -1];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
if (o_room.seatlist[i].gameinfo.isprepare == 0) {
|
||||
playerRoom.whoready[i]=0;
|
||||
playerRoom.user_ctrl[4+i]=0;
|
||||
}
|
||||
}
|
||||
if (!o_room.seatlist[i]) {
|
||||
playerRoom.whoready[i]=0;
|
||||
playerRoom.user_ctrl[4+i]=0;
|
||||
}
|
||||
}
|
||||
mod_jxmj.send_to_self(playerRoom,o_room,'war_ready',seat,{});
|
||||
return;
|
||||
}
|
||||
if(playerRoom.status>0 &&playerRoom.status<3)
|
||||
{return;}
|
||||
clearInterval(playerRoom.timer[0]);
|
||||
clearInterval(playerRoom.timer[1]);
|
||||
playerRoom.timer[0]=-1;
|
||||
playerRoom.timer[1]=-1;
|
||||
//clearInterval(playerRoom.timer[2]);
|
||||
//if(o_room.game){
|
||||
// o_room.seatlist[seat].gameinfo.isprepare = 1;
|
||||
var pack = {"data": {}};
|
||||
pack.data.agentid = o_room.o_game.o_agent.agentid;
|
||||
pack.data.playerid = o_room.seatlist[seat].playerid;
|
||||
pack.data.gameid = o_room.o_game.gameid;
|
||||
pack.data.roomcode = roomcode;
|
||||
pack.data.seat = seat;
|
||||
pack.conmode = o_room.seatlist[seat].conmode;
|
||||
pack.fromid = o_room.seatlist[seat].fromid;
|
||||
pack.data.ready = 1;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i] && o_room.seatlist[i].isrobot && o_room.seatlist[i].isrobot == 1) {
|
||||
playerRoom.robot[i] = 1;//准备开启
|
||||
if (o_room.seatlist[i].gameinfo.isprepare == 1) {
|
||||
if (playerRoom.status != 2) {
|
||||
playerRoom.user_ctrl[4 + i] = 1;
|
||||
clearTimeout(playerRoom.kick_timer[i]);//清空踢人计时器
|
||||
playerRoom.kick_timer[i] = -1;
|
||||
}//准备
|
||||
}
|
||||
//o_room.seatlist[i].gameinfo.isprepare = 1;
|
||||
//clearInterval(playerRoom.timer[2]);
|
||||
//clearTimeout(playerRoom.timer[3]);
|
||||
}
|
||||
}
|
||||
|
||||
clearTimeout(playerRoom.kick_timer[seat]);//清空踢人计时器
|
||||
playerRoom.kick_timer[seat] = -1;
|
||||
//
|
||||
// for (var i = 0; i < 4; i++) {
|
||||
// clearTimeout(playerRoom.kick_timer[i]);//清空踢人计时器
|
||||
// playerRoom.kick_timer[i]=-1;
|
||||
// }
|
||||
mod_jxmj.ready(pack, o_room);
|
||||
//console.log(o_room);
|
||||
//}
|
||||
};
|
||||
//玩家是否准备 可准备返1,不可返0
|
||||
mod_jxmj.player_CanPrepare = function (o_room, seat) {
|
||||
//console.log("玩家是否准备"+seat);
|
||||
//console.log(o_room);
|
||||
var roomcode = o_room.roomcode;
|
||||
if (o_room.seatlist[seat].gameinfo.isprepare == 0) {
|
||||
//子游戏进行判断是否满足准备条件
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
};
|
||||
//玩家在无限局是否可离开,只有准备阶段可离开,可离开返回值1,否者0
|
||||
mod_jxmj.isPlayerCanLeave = function (o_room, seat) {
|
||||
//console.log("玩家在无限局是否可离开"+seat);
|
||||
var roomcode = o_room.roomcode;
|
||||
if (o_room.seatlist[seat].gameinfo.isprepare == 0) {
|
||||
return 1; //可离开
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
//准备阶段的踢人
|
||||
mod_jxmj.ready_kickout = function (o_room, playerRoom) {
|
||||
//console.log("准备阶段的踢人");
|
||||
var roomcode = o_room.roomcode;
|
||||
var roomtype = o_room.roomtype;
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[roomtype[6]] || 4;
|
||||
//定时器开启
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (o_room.seatlist[i] && !o_room.seatlist[i].isrobot && o_room.seatlist[i].gameinfo.isprepare == 0) {//playerRoom.kick_timer[i]=setTimeout(mod_jxmj.kickout,60*1000,o_room, i);
|
||||
clearTimeout(playerRoom.kick_timer[i]);//清空踢人计时器
|
||||
playerRoom.kick_timer[i]=-1;
|
||||
playerRoom.kick_timer[i] = setTimeout(mod_jxmj.kickout0, 30 * 1000, o_room, i);
|
||||
//未准备则踢出
|
||||
}
|
||||
}
|
||||
};
|
||||
mod_jxmj.kickout0 = function (o_room, seat) {
|
||||
var roomcode = o_room.roomcode;
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
if (o_room.seatlist[seat].gameinfo.isprepare == 0) {
|
||||
playerRoom.kick_timer[seat] = setTimeout(mod_jxmj.kickout, 30 * 1000, o_room, seat);
|
||||
var msg = {};
|
||||
msg.conmode = o_room.seatlist[seat].conmode;
|
||||
msg.fromid = o_room.seatlist[seat].fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "tips";
|
||||
msg.data = {"tips": 2};
|
||||
youle_room.app.SendPack(msg);
|
||||
//未准备则踢出
|
||||
}
|
||||
};
|
||||
mod_jxmj.kickout = function (o_room, seat) {
|
||||
var roomcode = o_room.roomcode;
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
if (o_room.seatlist[seat].gameinfo.isprepare == 0) {
|
||||
var msg = {};
|
||||
msg.conmode = o_room.seatlist[seat].conmode;
|
||||
msg.fromid = o_room.seatlist[seat].fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "tips";
|
||||
msg.data = {"tips": 1};
|
||||
youle_room.app.SendPack(msg);//console.log("kickout="+seat);
|
||||
mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, seat);
|
||||
playerRoom.robot[seat] = -1;
|
||||
//未准备则踢出
|
||||
}
|
||||
};
|
||||
mod_jxmj.kickout3 = function (o_room, seat) {
|
||||
var roomcode = o_room.roomcode;
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
//if(o_room.seatlist[seat].gameinfo.isprepare == 0)
|
||||
if(!playerRoom.status || playerRoom.status != 1 && playerRoom.status != 2)
|
||||
{
|
||||
if(o_room.seatlist[seat] && !o_room.seatlist[seat].isrobot) {
|
||||
var msg = {};
|
||||
msg.conmode = o_room.seatlist[seat].conmode;
|
||||
msg.fromid = o_room.seatlist[seat].fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "tips";
|
||||
msg.data = {"tips": 3};
|
||||
youle_room.app.SendPack(msg);
|
||||
}
|
||||
if(o_room.seatlist[seat])
|
||||
{o_room.seatlist[seat].gameinfo.isprepare = 0;}
|
||||
mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, seat);
|
||||
playerRoom.robot[seat] = -1;
|
||||
//未准备则踢出
|
||||
}
|
||||
};
|
||||
|
||||
//自动准备
|
||||
mod_jxmj.auto_ready = function (o_room, playerRoom) {
|
||||
var roomcode = o_room.roomcode;
|
||||
var roomtype = o_room.roomtype;
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[roomtype[6]] || 4;
|
||||
//定时器开启
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (o_room.seatlist[i] && !o_room.seatlist[i].isrobot && playerRoom.user_ctrl[4+i] == 0 && playerRoom.status == 3) {//playerRoom.kick_timer[i]=setTimeout(mod_jxmj.kickout,60*1000,o_room, i);
|
||||
clearTimeout(playerRoom.ready_timer[i]);//清空踢人计时器
|
||||
playerRoom.ready_timer[i] = -1;
|
||||
playerRoom.ready_timer[i] = setTimeout(mod_jxmj.auto_ready0, 25 * 1000, o_room, i);
|
||||
//未准备则踢出
|
||||
}
|
||||
}
|
||||
};
|
||||
mod_jxmj.auto_ready0 = function (o_room, seat) {
|
||||
var roomcode = o_room.roomcode;
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
if (playerRoom.user_ctrl[4+seat] == 0 && playerRoom.status == 3) {
|
||||
playerRoom.ready_timer[seat] = setTimeout(mod_jxmj.auto_ready1, 25 * 1000, o_room, seat);
|
||||
var msg = {};
|
||||
msg.conmode = o_room.seatlist[seat].conmode;
|
||||
msg.fromid = o_room.seatlist[seat].fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "tips";
|
||||
msg.data = {"tips": 7};
|
||||
youle_room.app.SendPack(msg);
|
||||
//未准备则踢出
|
||||
}
|
||||
};
|
||||
mod_jxmj.auto_ready1 = function (o_room, seat) {
|
||||
var roomcode = o_room.roomcode;
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
if (playerRoom.user_ctrl[4+seat] == 0 && playerRoom.status == 3) {
|
||||
var msg = {};
|
||||
msg.conmode = o_room.seatlist[seat].conmode;
|
||||
msg.fromid = o_room.seatlist[seat].fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "tips";
|
||||
msg.data = {"tips": 8};
|
||||
youle_room.app.SendPack(msg);//console.log("kickout="+seat);
|
||||
var pack = {};
|
||||
pack.data = {};
|
||||
pack.data.agentid = o_room.o_game.o_agent.agentid;
|
||||
pack.data.gameid = o_room.o_game.gameid;
|
||||
pack.data.roomcode = o_room.roomcode;
|
||||
pack.data.playerid = o_room.seatlist[seat].playerid;
|
||||
pack.data.seat = seat;
|
||||
pack.data.ready = 1;
|
||||
pack.conmode = o_room.seatlist[seat].conmode;
|
||||
pack.fromid = o_room.seatlist[seat].fromid;
|
||||
mod_jxmj.ready(pack, o_room);
|
||||
//未准备则踢出
|
||||
}
|
||||
};
|
||||
1
codes/games/server/games/jinxian_mj/config/配置模块.txt
Normal file
1
codes/games/server/games/jinxian_mj/config/配置模块.txt
Normal file
@@ -0,0 +1 @@
|
||||
config_room·<EFBFBD>¼ה<EFBFBD>ה<EFBFBD><EFBFBD>
|
||||
823
codes/games/server/games/jinxian_mj/flow/flow.js
Normal file
823
codes/games/server/games/jinxian_mj/flow/flow.js
Normal file
@@ -0,0 +1,823 @@
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow_deal_card.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/net_start_game.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/net_start_play_way.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/net_put_card.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/net_operate.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/method_operate.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/method_save.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/net_ready.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow_sys.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow_other.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow_start_play_way.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow_end_play_way.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow_operate/method_common_operate.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow_operate/method_many_operate.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow_operate/method_An_Jia_gang.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow_operate/method_operate_hu.js", function () {
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
//服务器状态清零,初始化状态
|
||||
mod_jxmj.restart = function (playerRoom, o_room) {
|
||||
playerRoom.status = 0;
|
||||
}
|
||||
|
||||
mod_jxmj.autoOperate=function(o_room,playerRoom,pack){
|
||||
var put = {
|
||||
"app": "youle",
|
||||
"route": 'jinxianmj',
|
||||
"rpc": "put",
|
||||
"conmode":o_room.seatlist[playerRoom.identity[4]].conmode,
|
||||
"fromid":o_room.seatlist[playerRoom.identity[4]].fromid,
|
||||
"data": {
|
||||
"agentid": pack.data.agentid,
|
||||
"gameid": pack.data.gameid,
|
||||
"playerid": o_room.seatlist[seat].playerid,
|
||||
"roomcode": pack.data.roomcode,
|
||||
"seat": playerRoom.identity[4],
|
||||
"put_pos": 13,
|
||||
}
|
||||
};
|
||||
var sieves = {
|
||||
"app": "youle",
|
||||
"route": 'jinxianmj',
|
||||
"rpc": "sieves",
|
||||
"conmode":o_room.seatlist[playerRoom.identity[4]].conmode,
|
||||
"fromid":o_room.seatlist[playerRoom.identity[4]].fromid,
|
||||
"data": {
|
||||
"agentid": pack.data.agentid,
|
||||
"gameid": pack.data.gameid,
|
||||
"playerid": o_room.seatlist[seat].playerid,
|
||||
"roomcode": pack.data.roomcode,
|
||||
"seat": playerRoom.identity[4],
|
||||
"sieves": 0,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
mod_jxmj.sieves = 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 playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var mode = parseInt(pack.data.sieves);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room || !o_room.makewartime) {
|
||||
return;
|
||||
}
|
||||
// mod_jxmj.set_time(playerRoom);
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
//msg.seat =pack.data.seat;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "sieves";
|
||||
msg.seat = seat;
|
||||
msg.data = {};
|
||||
|
||||
var select=function (playerRoom) {
|
||||
var hand_jing_num=[0,0,0,0];
|
||||
for (var i = 0; i < person; i++) {
|
||||
for (var j = 0; j < playerRoom.hand[i][0].length; j++) {
|
||||
if (playerRoom.hand[i][0][j]==playerRoom.jing[0]){
|
||||
hand_jing_num[i]+=2;
|
||||
}
|
||||
if (playerRoom.hand[i][0][j]==playerRoom.jing[1]){
|
||||
hand_jing_num[i]+=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
var to_many=hand_jing_num.some(function (x) {
|
||||
return x>=6;
|
||||
});
|
||||
return to_many;
|
||||
}
|
||||
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[o_room.roomtype[6]] || 4;
|
||||
var sieves = [-1, -1];
|
||||
if (playerRoom.already_operate==1&&playerRoom.down_jing[0]&&playerRoom.down_jing[0]>0&&playerRoom.jing[0]&&playerRoom.jing[0]>0){
|
||||
if (playerRoom.sieve_get[3] != -1) {
|
||||
playerRoom.sieve_get[2] = 3;
|
||||
playerRoom.sieve_get[3] = -1;
|
||||
playerRoom.sieve_get[4] = 2;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (mode!=4&&mode!=5&&playerRoom.sieve_count[mode]>0) {
|
||||
return;
|
||||
}
|
||||
//服务器和客户端都发了骰子包,导致都处理了
|
||||
if (playerRoom.sieve_get[3] == -1){
|
||||
return;
|
||||
}
|
||||
playerRoom.online_undo_time=[0,0,0,0];
|
||||
playerRoom.online_undo=[0,0,0,0];
|
||||
|
||||
playerRoom.sieve_count[mode]=1;
|
||||
playerRoom.sieve_get[3] = playerRoom.identity[4];
|
||||
switch (mode) {
|
||||
case 0:
|
||||
// //筛子选座位
|
||||
// sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选谁掷色子选蹲牌
|
||||
// var sum = -1;
|
||||
// for (var i = 0; i < sieves.length; i++) {
|
||||
// sum = sum + sieves[i];
|
||||
// }
|
||||
// var hu_ord = [];//优先胡牌顺序
|
||||
// for (var i = 0; i < person; i++) {
|
||||
// var j = i + playerRoom.identity[4];
|
||||
// if (j < 0) {
|
||||
// j = j + person;
|
||||
// }
|
||||
// else if (j > (person-1)) {
|
||||
// j = j - person;
|
||||
// }
|
||||
// hu_ord[i] = j;
|
||||
// }
|
||||
// var myseat = -1;
|
||||
// myseat = hu_ord[parseInt(sum % person)];
|
||||
//
|
||||
// playerRoom.sieves_num = 1;
|
||||
//
|
||||
// playerRoom.sieve_get[0] = sieves[0];
|
||||
// playerRoom.sieve_get[1] = sieves[1];
|
||||
// playerRoom.sieve_get[2] = 2;
|
||||
// playerRoom.sieve_get[3] = myseat;
|
||||
// playerRoom.sieve_get[4] = playerRoom.sieve_get[4] + 1;
|
||||
// break;
|
||||
case 2:
|
||||
var myseat = -1;
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选蹲牌
|
||||
playerRoom.sieves_num = 2;
|
||||
myseat = playerRoom.identity[4];
|
||||
msg.data.last_up_jing = playerRoom.last_up_jing;
|
||||
msg.data.last_down_jing = playerRoom.last_down_jing;
|
||||
if (playerRoom.last_up_jing[0] != -1) {
|
||||
msg.data.smile_score = mod_jxmj.jxUtil.all_smile_score(playerRoom);//回头一笑
|
||||
}
|
||||
if (playerRoom.last_down_jing[0] != -1&&playerRoom.config.smile_to_behind == 2) {
|
||||
//回头两笑
|
||||
msg.data.smile2_score = mod_jxmj.jxUtil.all_smile2_score(playerRoom);//回头2笑
|
||||
}
|
||||
playerRoom.sieve_get[0] = sieves[0];
|
||||
playerRoom.sieve_get[1] = sieves[1];
|
||||
if (playerRoom.config.updown == 1 || playerRoom.config.just_a_song == 1 || playerRoom.config.bmob == 1) {
|
||||
playerRoom.sieve_get[2] = 3;
|
||||
} else if (playerRoom.config.electric == 0) {
|
||||
playerRoom.sieve_get[2] = 4;
|
||||
} else if (playerRoom.config.electric == 1) {
|
||||
playerRoom.sieve_get[2] = 5;
|
||||
}
|
||||
if (playerRoom.sieve_get[2] == 0) {
|
||||
playerRoom.sieve_get[2] = 3;
|
||||
}
|
||||
playerRoom.sieve_get[3] = myseat;
|
||||
playerRoom.sieve_get[4] = playerRoom.sieve_get[4] + 1;
|
||||
|
||||
break;
|
||||
case 3:
|
||||
//上下翻
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选上下精
|
||||
playerRoom.down_jing = mod_jxmj.jxUtil.update_down_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
if (playerRoom.config.updown == 1) {
|
||||
msg.data.down_score = mod_jxmj.jxUtil.all_down_score(playerRoom);//上下翻
|
||||
}
|
||||
playerRoom.jing = mod_jxmj.jxUtil.update_up_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
console.log("原来的精:"+ playerRoom.jing)
|
||||
if (select(playerRoom)){
|
||||
playerRoom.jing=[-1,-1];
|
||||
playerRoom.up_jing_pos=-1;
|
||||
for (var i = 0; i < 10; i++) {
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选上下精
|
||||
playerRoom.jing = mod_jxmj.jxUtil.update_up_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
if (select(playerRoom)) {
|
||||
playerRoom.jing=[-1,-1];
|
||||
playerRoom.up_jing_pos=-1;
|
||||
}else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (playerRoom.jing[0]==-1) {
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选上下精
|
||||
playerRoom.jing = mod_jxmj.jxUtil.update_up_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
}
|
||||
}
|
||||
console.log("最后的精:"+ playerRoom.jing)
|
||||
//playerRoom.jing=[8,9];
|
||||
mod_jxmj.room.adjustJing(playerRoom);
|
||||
//for (var i = 0; i < person; i++) {
|
||||
var ban=0;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i!=playerRoom.identity[4]) {
|
||||
var ting = mod_jxmj.ting_pai(playerRoom, i);
|
||||
//console.log(ting)
|
||||
if (ting.bao_ting == 1) {
|
||||
playerRoom.baoting[i] = 1;
|
||||
ban=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
var host_ting=mod_jxmj.ting_14_pai(playerRoom, playerRoom.identity[4])
|
||||
if (host_ting.bao_ting==1){
|
||||
playerRoom.baoting[playerRoom.identity[4]] = 1;
|
||||
playerRoom.baoting[playerRoom.baoting.length] = host_ting.throw_pai;
|
||||
}
|
||||
|
||||
playerRoom.sieves_num = 3;
|
||||
|
||||
playerRoom.sieve_get[0] = sieves[0];
|
||||
playerRoom.sieve_get[1] = sieves[1];
|
||||
playerRoom.sieve_get[2] = 3;
|
||||
playerRoom.sieve_get[3] = -1;
|
||||
playerRoom.sieve_get[4] = playerRoom.sieve_get[4] + 1;
|
||||
//playerRoom.jing=[7,8];
|
||||
for (var i = 0; i < playerRoom.robot.length; i++) {
|
||||
if (playerRoom.robot[i]!=-1||playerRoom.offline[i]==1){
|
||||
playerRoom.baoting[i]=0;
|
||||
}
|
||||
}
|
||||
msg.data.baoting = playerRoom.baoting;
|
||||
msg.data.upjing = playerRoom.jing;
|
||||
msg.data.downjing = playerRoom.down_jing;
|
||||
if (ban==0||host_ting.bao_ting==1){
|
||||
var judge_hupai = mod_jxmj.hu_pai_zimo(playerRoom, playerRoom.identity[4]);
|
||||
if (judge_hupai) {
|
||||
// for (var i = 0; i < playerRoom.user_eat_bump.length; i++) {
|
||||
// for (var j = 0; j < playerRoom.user_eat_bump[i].length; j++) {
|
||||
// playerRoom.user_eat_bump[i][j]=0;
|
||||
// }
|
||||
// }
|
||||
playerRoom.user_eat_bump[playerRoom.identity[4]][5] = 1;//1吃胡
|
||||
}//自摸胡
|
||||
msg.data.user_eat_bump=ExArray.copyArray(playerRoom.user_eat_bump);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
//无限发电
|
||||
playerRoom.sieves_num = 4;
|
||||
var action_seat = playerRoom.identity[4];
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选上下精
|
||||
if (playerRoom.seives.length > 1) {
|
||||
if ((playerRoom.seives[playerRoom.seives.length - 1][0] + playerRoom.seives[playerRoom.seives.length - 1][1]) == (sieves[1] + sieves[0])) {
|
||||
action_seat = -1;
|
||||
}
|
||||
}
|
||||
playerRoom.seives.push(sieves);
|
||||
if (action_seat == playerRoom.identity[4]) {
|
||||
playerRoom.down_jing = mod_jxmj.jxUtil.update_down_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
msg.data.down_score = mod_jxmj.jxUtil.all_down_score(playerRoom);//上下翻
|
||||
msg.data.downjing = playerRoom.down_jing;
|
||||
//分数先接结算
|
||||
var turn = playerRoom.turn[1];
|
||||
for (var i = 0; i < person; i++) {
|
||||
playerRoom.turn_point[turn][i]=msg.data.down_score[i].score+playerRoom.turn_point[turn][i];
|
||||
}
|
||||
msg.data.turn_point=ExArray.copyArray(playerRoom.turn_point);
|
||||
} else if (action_seat == -1) {
|
||||
playerRoom.seives = [];
|
||||
playerRoom.jing = mod_jxmj.jxUtil.update_up_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
if (select(playerRoom)){
|
||||
playerRoom.jing=[-1,-1];
|
||||
playerRoom.up_jing_pos=-1;
|
||||
for (var i = 0; i < 10; i++) {
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选上下精
|
||||
playerRoom.jing = mod_jxmj.jxUtil.update_up_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
if (select(playerRoom)) {
|
||||
playerRoom.jing=[-1,-1];
|
||||
playerRoom.up_jing_pos=-1;
|
||||
}
|
||||
}
|
||||
if (playerRoom.jing[0]==-1) {
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选上下精
|
||||
playerRoom.jing = mod_jxmj.jxUtil.update_up_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
}
|
||||
}
|
||||
// playerRoom.jing=[11,12];
|
||||
mod_jxmj.room.adjustJing(playerRoom);
|
||||
//for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.config.donot==1&&playerRoom.config.electric==0){//不打牌,无限发电
|
||||
//前端自动打,但是没有牌可以摸,触发流局
|
||||
//因为出的牌也会变成-1,因此没关系
|
||||
for (var i = 0; i < playerRoom.poker.length; i++) {
|
||||
playerRoom.poker[i]=-1;
|
||||
}
|
||||
var send = {
|
||||
"app": "youle",
|
||||
"route": 'jinxianmj',
|
||||
"rpc": "put",
|
||||
"conmode":o_room.seatlist[playerRoom.identity[4]].conmode,
|
||||
"fromid":o_room.seatlist[playerRoom.identity[4]].fromid,
|
||||
"data": {
|
||||
"agentid": pack.data.agentid,
|
||||
"gameid": pack.data.gameid,
|
||||
"playerid": o_room.seatlist[seat].playerid,
|
||||
"roomcode": pack.data.roomcode,
|
||||
"seat": playerRoom.identity[4],
|
||||
"put_pos": 13,
|
||||
}
|
||||
};
|
||||
setTimeout(mod_jxmj.put,5000,send);
|
||||
}else {
|
||||
var ban=0;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i!=playerRoom.identity[4]){
|
||||
var ting = mod_jxmj.ting_pai(playerRoom, i);
|
||||
//console.log(ting)
|
||||
if (ting.bao_ting == 1) {
|
||||
playerRoom.baoting[i] = 1;
|
||||
ban=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
var host_ting=mod_jxmj.ting_14_pai(playerRoom, playerRoom.identity[4])
|
||||
if (host_ting.bao_ting==1){
|
||||
playerRoom.baoting[playerRoom.identity[4]] = 1;
|
||||
playerRoom.baoting[playerRoom.baoting.length] = host_ting.throw_pai;
|
||||
}
|
||||
for (var i = 0; i < playerRoom.robot.length; i++) {
|
||||
if (playerRoom.robot[i]!=-1||playerRoom.offline[i]==1){
|
||||
playerRoom.baoting[i]=0;
|
||||
}
|
||||
}
|
||||
msg.data.baoting = playerRoom.baoting;
|
||||
if (ban==0||host_ting.bao_ting==1){
|
||||
var judge_hupai = mod_jxmj.hu_pai_zimo(playerRoom, playerRoom.identity[4]);
|
||||
if (judge_hupai) {
|
||||
playerRoom.user_eat_bump[playerRoom.identity[4]][5] = 1;//1吃胡
|
||||
}//自摸胡
|
||||
msg.data.user_eat_bump=ExArray.copyArray(playerRoom.user_eat_bump);
|
||||
}
|
||||
}
|
||||
}
|
||||
msg.data.upjing = playerRoom.jing;
|
||||
playerRoom.sieve_get[0] = sieves[0];
|
||||
playerRoom.sieve_get[1] = sieves[1];
|
||||
playerRoom.sieve_get[2] = 4;
|
||||
playerRoom.sieve_get[3] = action_seat;
|
||||
playerRoom.sieve_get[4] = playerRoom.sieve_get[4] + 1;
|
||||
break;
|
||||
case 5:
|
||||
playerRoom.sieves_num = 5;
|
||||
//固定发电
|
||||
var hu_ord = [];//优先胡牌顺序
|
||||
for (var i = 0; i < person; i++) {
|
||||
var j = i + playerRoom.identity[4];
|
||||
if (j < 0) {
|
||||
j = j + person;
|
||||
}
|
||||
else if (j > (person-1)) {
|
||||
j = j - person;
|
||||
}
|
||||
hu_ord[i] = j;
|
||||
}
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选上下精
|
||||
playerRoom.down_jing = mod_jxmj.jxUtil.update_down_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
msg.data.down_score = mod_jxmj.jxUtil.all_down_score(playerRoom);//上下翻
|
||||
msg.data.downjing = playerRoom.down_jing;
|
||||
var ban = 1;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.ok[i] == 0) {
|
||||
ban = 0;
|
||||
}
|
||||
}
|
||||
var action_seat;
|
||||
playerRoom.ok[hu_ord[seat]] = 1;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.ok[i] == 0) {
|
||||
action_seat = hu_ord[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (action_seat == undefined) {
|
||||
action_seat = hu_ord[0];
|
||||
}
|
||||
if (ban == 1) {
|
||||
action_seat = -1;
|
||||
playerRoom.jing = mod_jxmj.jxUtil.update_up_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
if (select(playerRoom)){
|
||||
playerRoom.jing=[-1,-1];
|
||||
playerRoom.up_jing_pos=-1;
|
||||
for (var i = 0; i < 10; i++) {
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选上下精
|
||||
playerRoom.jing = mod_jxmj.jxUtil.update_up_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
if (select(playerRoom)) {
|
||||
playerRoom.jing=[-1,-1];
|
||||
playerRoom.up_jing_pos=-1;
|
||||
}
|
||||
}
|
||||
if (playerRoom.jing[0]==-1) {
|
||||
sieves = mod_jxmj.jxUtil.sieve(1, 6, 2);//选上下精
|
||||
playerRoom.jing = mod_jxmj.jxUtil.update_up_jing(playerRoom, playerRoom.user_ctrl[8], sieves);
|
||||
}
|
||||
}
|
||||
// playerRoom.jing=[11,12];
|
||||
mod_jxmj.room.adjustJing(playerRoom);
|
||||
// for (var i = 0; i < person; i++) {
|
||||
|
||||
//}
|
||||
var ban=0;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i!= hu_ord[0]) {
|
||||
var ting = mod_jxmj.ting_pai(playerRoom, i);
|
||||
//console.log(ting)
|
||||
if (ting.bao_ting == 1) {
|
||||
playerRoom.baoting[i] = 1;
|
||||
ban=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
var host_ting=mod_jxmj.ting_14_pai(playerRoom, hu_ord[0])
|
||||
if (host_ting.bao_ting==1){
|
||||
playerRoom.baoting[hu_ord[0]] = 1;
|
||||
playerRoom.baoting[playerRoom.baoting.length] = host_ting.throw_pai;
|
||||
}
|
||||
for (var i = 0; i < playerRoom.robot.length; i++) {
|
||||
if (playerRoom.robot[i]!=-1||playerRoom.offline[i]==1){
|
||||
playerRoom.baoting[i]=0;
|
||||
}
|
||||
}
|
||||
msg.data.upjing = playerRoom.jing;
|
||||
msg.data.baoting = playerRoom.baoting;
|
||||
if (ban==0||host_ting.bao_ting==1){
|
||||
var judge_hupai = mod_jxmj.hu_pai_zimo(playerRoom, hu_ord[0]);
|
||||
if (judge_hupai) {
|
||||
playerRoom.user_eat_bump[hu_ord[0]][5] = 1;//1吃胡
|
||||
}//自摸胡
|
||||
msg.data.user_eat_bump=ExArray.copyArray(playerRoom.user_eat_bump);
|
||||
}
|
||||
}
|
||||
playerRoom.sieve_get[0] = sieves[0];
|
||||
playerRoom.sieve_get[1] = sieves[1];
|
||||
playerRoom.sieve_get[2] = 5;
|
||||
playerRoom.sieve_get[3] = action_seat;
|
||||
playerRoom.sieve_get[4] = playerRoom.sieve_get[4] + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (playerRoom.sieve_get[3] == -1) {
|
||||
if (playerRoom.up_jing_pos!=-1){
|
||||
playerRoom.poker[playerRoom.up_jing_pos]=-1;
|
||||
}
|
||||
if (playerRoom.down_jing_pos!=-1) {
|
||||
playerRoom.poker[playerRoom.down_jing_pos]=-1;
|
||||
}
|
||||
msg.pai_num = mod_jxmj.get_remain_card(playerRoom);
|
||||
msg.msg = "你已经摇完了筛子了!!!"
|
||||
}
|
||||
msg.data.sieves = playerRoom.sieve_get;
|
||||
msg.roomcode = roomcode;
|
||||
msg.data.user_ctrl = +new Date();
|
||||
//playerRoom.user_ctrl[11]=msg.data.user_ctrl;
|
||||
msg.data.baoting = ExArray.copyArray(playerRoom.baoting);
|
||||
playerRoom.rep_num[0] += 1;
|
||||
msg.rep_num= playerRoom.rep_num;
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
mod_jxmj.baoting = 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 playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var mode = parseInt(pack.data.baoting);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room || !o_room.makewartime) {
|
||||
return;
|
||||
}
|
||||
// mod_jxmj.set_time(playerRoom);
|
||||
//是否是比賽場
|
||||
if (o_room.match_data) {//比赛场
|
||||
|
||||
} else {//非比赛场
|
||||
|
||||
}
|
||||
//沒有準備結束標識的話退出
|
||||
if (!mod_jxmj.read_over) {
|
||||
return;
|
||||
}
|
||||
//包額發送模式不為1時並且房間未曾初始化時退出
|
||||
if (!playerRoom) {//console.log("pack.data.send != 1");
|
||||
return;
|
||||
}
|
||||
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
//msg.seat =pack.data.seat;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "baoting";
|
||||
msg.seat = seat;
|
||||
msg.data = {};
|
||||
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[o_room.roomtype[6]] || 4;
|
||||
|
||||
switch (mode) {
|
||||
case 0://不停牌
|
||||
playerRoom.baoting[seat] = 0;
|
||||
break;
|
||||
case 1:
|
||||
//机器人可以出牌
|
||||
playerRoom.robot_put=1;
|
||||
break;
|
||||
case 2://听牌
|
||||
if (playerRoom.baoting[seat] == 1) {
|
||||
// debugger
|
||||
playerRoom.baoting[seat] = 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (playerRoom.baoting.indexOf(1)==-1&&playerRoom.final_hu[0]<0){
|
||||
//var judge_hupai = mod_jxmj.hu_pai_zimo(playerRoom, playerRoom.identity[4]);
|
||||
//if (judge_hupai) {
|
||||
// playerRoom.user_eat_bump[ playerRoom.identity[4]][5] = 1;//1吃胡
|
||||
//}//自摸胡
|
||||
//// var judge_hupai = mod_jxmj.hu_pai_zimo(playerRoom, playerRoom.identity[4]);
|
||||
//// if (judge_hupai) {
|
||||
//// playerRoom.user_eat_bump[playerRoom.identity[4]][5] = 1;//1吃胡
|
||||
//// }//自摸胡
|
||||
|
||||
mod_jxmj.judge_bar(playerRoom, playerRoom.identity[4]);
|
||||
//mod_jxmj.judge_bar_an_gang(playerRoom, playerRoom.identity[4]);//LOL
|
||||
msg.data.user_eat_bump=ExArray.copyArray(playerRoom.user_eat_bump);
|
||||
}
|
||||
|
||||
if (mode !=1){
|
||||
msg.data.sieves = playerRoom.sieve_get;
|
||||
msg.roomcode = roomcode;
|
||||
msg.data.baoting = playerRoom.baoting;
|
||||
msg.data.user_ctrl = +new Date();
|
||||
//playerRoom.user_ctrl[11]=msg.data.user_ctrl;
|
||||
playerRoom.rep_num[0] += 1;
|
||||
msg.rep_num= playerRoom.rep_num;
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
if (!pack.data.server) {
|
||||
playerRoom.online_undo_time[seat]=0;
|
||||
playerRoom.online_undo[seat]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod_jxmj.offline = 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 playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var mode = parseInt(pack.data.sieves);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room || !o_room.makewartime) {
|
||||
return;
|
||||
}
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
//msg.seat =pack.data.seat;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "start";
|
||||
msg.seat = seat;
|
||||
msg.data = {
|
||||
|
||||
};
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
|
||||
//某玩家離綫
|
||||
if (pack.data.send && pack.data.send == 100&&((o_room.infinite && o_room.infinite == 1)||playerRoom.config.offline_robot)) {
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (o_room.seatlist[i].onstate == 1) {
|
||||
playerRoom.offline[i] = 1;
|
||||
}
|
||||
}
|
||||
var online_seat = playerRoom.offline.indexOf(0);
|
||||
if (online_seat != -1 &&online_seat==seat && playerRoom.offline.indexOf(1) != -1) {
|
||||
if (playerRoom.offline_timer[0]==-1){
|
||||
playerRoom.offline_timer[0] = setInterval(mod_jxmj.put, 3000, pack, o_room,1);
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.offline[i]==1){
|
||||
playerRoom.offline_anytime[i]=15;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playerRoom.offline_timer[1]==-1){
|
||||
playerRoom.offline_timer[1] = setInterval(mod_jxmj.operate, 1200, pack, o_room,1);
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.offline[i]==1){
|
||||
playerRoom.offline_anytime[i]=15;
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (playerRoom.offline_timer[2]==-1){
|
||||
// playerRoom.offline_timer[2] = setInterval(mod_jxmj.ready, 12000, pack, o_room);
|
||||
// }
|
||||
}
|
||||
}
|
||||
//o_room.method.sendpack_toother(msg, -1);
|
||||
}
|
||||
|
||||
mod_jxmj.wait_me = 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 playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room || !o_room.makewartime) {
|
||||
return;
|
||||
}
|
||||
playerRoom.user_ctrl[11] = new Date().getTime();
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "start";
|
||||
msg.seat = seat;
|
||||
msg.sound = [seat, 38, playerRoom.user_ctrl[11]]; //播放等一等声音
|
||||
msg.data = {
|
||||
|
||||
};
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
playerRoom.online_undo_time[seat]=0;
|
||||
playerRoom.online_undo[seat]=0;
|
||||
}
|
||||
|
||||
mod_jxmj.debug = 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 playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room || !o_room.makewartime) {
|
||||
return;
|
||||
}
|
||||
bug_time = new Date();
|
||||
var msg = {};
|
||||
var bugList = [];
|
||||
bugList = [bug_time, roomcode, o_room, playerRoom];
|
||||
mod_jxmj.bugList ? mod_jxmj.bugList.length<100&&mod_jxmj.bugList.push(bugList) : mod_jxmj.bugList = [bugList];
|
||||
}
|
||||
|
||||
mod_jxmj.off_kick = function (pack) {
|
||||
var agentid = pack.data.agentid;
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room) {
|
||||
return;
|
||||
}
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
playerRoom.offkick=playerRoom.offkick || [0,0,0,0];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var kick_seat = pack.data.kick_seat;
|
||||
if(playerRoom.offkick[kick_seat] == 0 && !playerRoom.status && o_room.seatlist[kick_seat].playerid != o_room.owner.playerid){
|
||||
mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, kick_seat);
|
||||
playerRoom.offkick[kick_seat] = 1;
|
||||
setTimeout(aa,5000,kick_seat);
|
||||
}
|
||||
function aa(seat){
|
||||
playerRoom.offkick[seat] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
mod_jxmj.unprepare_kick = function (pack) {
|
||||
var agentid = pack.data.agentid;
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room) {
|
||||
return;
|
||||
}
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
if(playerRoom.whoready != undefined){
|
||||
playerRoom.whoready[seat] = 0;
|
||||
}
|
||||
if(playerRoom.unprepare_kick && playerRoom.unprepare_kick[seat]){
|
||||
clearTimeout(playerRoom.unprepare_kick[seat]);
|
||||
playerRoom.unprepare_kick[seat] = 0;
|
||||
}
|
||||
playerRoom.unprepare_kick=playerRoom.unprepare_kick || [0,0,0,0];
|
||||
playerRoom.unprepare_kick[seat] =setTimeout(aa,12000,seat);
|
||||
function aa(seat){
|
||||
var ban = 0;
|
||||
if(o_room.seatlist){
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if(o_room.seatlist[i]&&i!=seat) ban = 1;
|
||||
}
|
||||
}
|
||||
if(ban && !playerRoom.status && o_room.seatlist[seat] && o_room.seatlist[seat].playerid != o_room.owner.playerid && (playerRoom.whoready && playerRoom.whoready[seat] == 0 || !playerRoom.whoready) ){
|
||||
mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, seat);
|
||||
if(o_room.infinite == 0 && (o_room.roomtype[9]||o_room.roomtype[11]) && !o_room.battlestate) {
|
||||
mod_jxmj[roomcode].deal_ip[seat] = 0;
|
||||
mod_jxmj[roomcode].deal_addr[seat] = 0;
|
||||
}
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "kick_remind";
|
||||
msg.kick_remind = 1;
|
||||
youle_room.app.SendPack(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod_jxmj.free_before_makewar = function (pack) {
|
||||
var agentid = pack.data.agentid;
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room) {
|
||||
return;
|
||||
}
|
||||
if (!o_room.makewartime&&parseInt(pack.data.go)==1) {
|
||||
mod_jxmj[roomcode]=null;
|
||||
delete mod_jxmj[roomcode];
|
||||
}
|
||||
}
|
||||
|
||||
mod_jxmj.overtime = function (pack) {
|
||||
var agentid = pack.data.agentid;
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room || !o_room.makewartime) {
|
||||
return;
|
||||
}
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
if (!playerRoom || playerRoom && playerRoom.status!=1 && playerRoom.status!=2) {
|
||||
return;
|
||||
}
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "start";
|
||||
var send=0;
|
||||
if (playerRoom.online_undo[seat]!=pack.data.daida) {
|
||||
send=1;
|
||||
}
|
||||
if (pack.data.daida==0){
|
||||
playerRoom.online_undo_time[seat]=0;
|
||||
playerRoom.online_undo[seat]=0;
|
||||
}else if (pack.data.daida==1){
|
||||
playerRoom.online_undo[seat]=1;
|
||||
playerRoom.online_undo_time[seat]=playerRoom.config.online_robot[0];
|
||||
}
|
||||
msg.daida = playerRoom.online_undo;
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
for (var index = 0; index < person; index++) {
|
||||
if (o_room.seatlist[index]) {
|
||||
msg.conmode = o_room.seatlist[index].conmode;
|
||||
msg.fromid = o_room.seatlist[index].fromid;
|
||||
if (playerRoom.robot[index] == -1&&send) {
|
||||
youle_room.app.SendPack(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
192
codes/games/server/games/jinxian_mj/flow/flow_deal_card.js
Normal file
192
codes/games/server/games/jinxian_mj/flow/flow_deal_card.js
Normal file
@@ -0,0 +1,192 @@
|
||||
//发牌流程:设置牌对应的数字代号——取出4个用户的牌——加密牌
|
||||
//KO(给各个用户发牌)设置牌首,牌尾,发牌位,癞子,判断杠,自摸胡,红中四红中胡,
|
||||
//给各个用户发牌,当每次开始一个小局时执行,每小局只执行1次
|
||||
//这里可以设置测试牌
|
||||
mod_jxmj.ini_faPai = function (playerRoom, o_room, sieve11, sieve22, type) {
|
||||
var host = playerRoom.identity[4];//庄家
|
||||
//人数
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
/*初始化手牌*/
|
||||
playerRoom.hand[0][0] = playerRoom.poker.slice(0, 13);//13张
|
||||
playerRoom.hand[1][0] = playerRoom.poker.slice(13, 26);//13张
|
||||
if (person >= 3) {
|
||||
playerRoom.hand[2][0] = playerRoom.poker.slice(26, 39);//13张
|
||||
}
|
||||
if (person >= 4) {
|
||||
playerRoom.hand[3][0] = playerRoom.poker.slice(39, 52);//13张
|
||||
}
|
||||
//牌发完之后将发出的牌设置为-1
|
||||
for (var i = 0; i < person * 13; i++) {
|
||||
playerRoom.poker[i] = -1;
|
||||
}
|
||||
|
||||
//牌首
|
||||
var pos1 = person * 13;
|
||||
playerRoom.user_ctrl[8] = pos1;//牌墙首牌位置//8下次要摸得牌的位置,
|
||||
//随机四个癞子,playerRoom.jing
|
||||
mod_jxmj.b.random_jing(playerRoom.poker, playerRoom, pos1);
|
||||
|
||||
playerRoom.jing = [-1, -1];//副精,正精
|
||||
//发牌控制
|
||||
mod_jxmj.deal_start_card_to_good(playerRoom, person,pos1,o_room);
|
||||
|
||||
mod_jxmj.room.adjustCard(playerRoom,pos1);
|
||||
|
||||
playerRoom.new_one=[0,0,0,0];//发完牌之后就不是新人了。
|
||||
|
||||
var first_card = playerRoom.poker[pos1];
|
||||
//设置给发牌位
|
||||
playerRoom.user_ctrl[3] = first_card;//是否&谁显示第14张牌
|
||||
|
||||
var next_seat = playerRoom.user_ctrl[2];
|
||||
if (playerRoom.config.pai_num == 112) {//红肿玩法
|
||||
//是否起手4红中,胡牌
|
||||
var judge_hupai = mod_jxmj.a.check4HZ(playerRoom.hand[host], first_card);
|
||||
if (judge_hupai) {
|
||||
//胡牌
|
||||
playerRoom.user_eat_bump[next_seat][5] = 4;
|
||||
}//自摸胡
|
||||
else {
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != next_seat) {
|
||||
//判断其他玩家摸牌是不是起手胡
|
||||
var judge_hupai = mod_jxmj.a.check4HZ(playerRoom.hand[i]);
|
||||
if (judge_hupai) {
|
||||
//记录给i用户胡牌操作
|
||||
playerRoom.user_eat_bump[i][5] = 4;
|
||||
break;
|
||||
}//自摸胡
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//筛子
|
||||
//KO(两个骰子,掷骰子,把牌分为4盾,从第几张开始抓牌)
|
||||
mod_jxmj.get_sieve = function (type) {
|
||||
var sieve1 = parseInt(Math.random() * 6) + 1;//1----6
|
||||
var sieve2 = parseInt(Math.random() * 6) + 1;//1----6
|
||||
var sieve = sieve1 + sieve2;
|
||||
var sieve11 = sieve % 4;
|
||||
if (sieve11 == 0) {
|
||||
sieve11 = 4;
|
||||
}
|
||||
sieve11 -= 1;
|
||||
var sieve22 = Math.min(sieve1, sieve2);
|
||||
return [sieve11, sieve22, sieve1, sieve2];//哪个玩家的牌墙、牌墙第几个位置、第1个筛子、第2个筛子
|
||||
}
|
||||
//KO(就是當房間游戏未开始時的操作),分牌,摸牌,判断起手胡,自摸杠
|
||||
//发牌处理,当每次开始一个小局时执行,每小局只执行1次
|
||||
mod_jxmj.deal_Pai = function (playerRoom, o_room) {
|
||||
playerRoom = playerRoom || {};//第一次房间重置
|
||||
if (playerRoom.status) {
|
||||
return;
|
||||
}
|
||||
mod_jxmj.roomconfig(o_room,playerRoom);
|
||||
if (playerRoom.config.smile_to_behind == 1||playerRoom.config.smile_to_behind == 2) {////回头一笑:取上一局的上精,并计分
|
||||
if (playerRoom.jing.length>0&&playerRoom.jing[0]>-1){
|
||||
playerRoom.last_up_jing = ExArray.copyArray(playerRoom.jing);
|
||||
}
|
||||
|
||||
if (playerRoom.down_jing.length>0&&playerRoom.down_jing[0]>-1){
|
||||
playerRoom.last_down_jing = ExArray.copyArray(playerRoom.down_jing);
|
||||
}
|
||||
}
|
||||
|
||||
playerRoom.status = 1;//房间状态
|
||||
mod_jxmj.set_identity(playerRoom, o_room);////设置各个用户的各种初始状态
|
||||
playerRoom.poker = ExArray.randomArray(ExArray.quadArray(playerRoom.config.card_enum));
|
||||
playerRoom.config.pai_num = playerRoom.poker.length;
|
||||
var arr = mod_jxmj.get_sieve(0);//骰子分牌 [哪个玩家的牌墙、牌墙第几个位置、第1个筛子、第2个筛子]
|
||||
var sieve11 = arr[0]/*哪个玩家的牌墙*/, sieve22 = arr[1]/*牌墙第几个位置*/, sieve1 = arr[2]/*第1个筛子*/, sieve2 = arr[3]/*第2个筛子*/;
|
||||
playerRoom.sieve = [sieve1, sieve2];//筛子
|
||||
playerRoom.pos = [0, 0];//上下,位置
|
||||
playerRoom.hand = [];//各家手牌
|
||||
//手牌初始化
|
||||
for (var i = 0; i < 4; i++) {
|
||||
playerRoom.hand[i] = [];
|
||||
playerRoom.hand[i][0] = [];
|
||||
}
|
||||
//设置牌首,牌尾,发牌位,癞子,判断杠,自摸胡,红中四红中胡,
|
||||
mod_jxmj.ini_faPai(playerRoom,o_room, sieve11, sieve22, 0);
|
||||
//花牌初始化
|
||||
playerRoom.hua = [];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
playerRoom.hua[i] = [];
|
||||
}
|
||||
//牌池初始化
|
||||
playerRoom.sea = [];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
playerRoom.sea[i] = [];
|
||||
}
|
||||
//0核对延时,1当前回合已下注人数,2上次谁得到控制权,3控制权,4-7是否已下注,8牌墙首牌,9下家是否听牌,10是否重新计时,11核对准备时间,12重新计时的次数
|
||||
playerRoom.discard = [0, 0, 0, 0];
|
||||
playerRoom.hua = [];
|
||||
for(var i = 0; i < 4; i++) {
|
||||
playerRoom.hua[i] = [];
|
||||
}
|
||||
|
||||
playerRoom.nm_hua = [];
|
||||
playerRoom.hua_hua = [];
|
||||
for(var i = 0; i < 4; i++) {
|
||||
playerRoom.hua_hua[i] = [];
|
||||
}
|
||||
playerRoom.nm_guohu = [-1, -1, -1, -1];
|
||||
playerRoom.hua_shoupai = [];
|
||||
for(var i = 0; i < 4; i++) {
|
||||
playerRoom.hua_shoupai[i] = [];
|
||||
}
|
||||
// playerRoom.hua_num = [0,0,0,0];
|
||||
playerRoom.hua_pai = [0, 0, 0, 0];
|
||||
playerRoom.hua_beginshoupai = [];
|
||||
playerRoom.nm_ting_pai = [];
|
||||
for(var i = 0; i < 4; i++) {
|
||||
playerRoom.hua_beginshoupai[i] = mod_jxmj.b.arrange_pai(playerRoom.hand[i][0], playerRoom);
|
||||
}
|
||||
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
for(var a = 0; a < person; a++) {
|
||||
// console.log(a + "号玩家");
|
||||
playerRoom.hua_hua[a] = [];
|
||||
playerRoom.hua_shoupai[a] = [];
|
||||
mod_jxmj.huapaideal(playerRoom, playerRoom.hand[a][0], a);
|
||||
}
|
||||
mod_jxmj.huapaidealdan(playerRoom, playerRoom.user_ctrl[3], playerRoom.user_ctrl[2]);
|
||||
//用户控制权
|
||||
var next_seat = playerRoom.user_ctrl[2];
|
||||
//mod_jxmj.ting_pai(playerRoom,next_seat);
|
||||
////判断自摸杠,暗杠
|
||||
//mod_jxmj.judge_bar(playerRoom, next_seat);
|
||||
//console.log("fapaihu_pai_zimo");
|
||||
//判断和牌 起手胡
|
||||
//var judge_hupai = mod_jxmj.hu_pai_zimo(playerRoom, next_seat);
|
||||
//if (judge_hupai) {
|
||||
// playerRoom.user_eat_bump[next_seat][5] = 1;//1吃胡
|
||||
//}//自摸胡
|
||||
for(var i = 0; i < 4; i++) {
|
||||
playerRoom.hand[i][0] = mod_jxmj.b.arrange_pai(playerRoom.hand[i][0], playerRoom);
|
||||
}
|
||||
}
|
||||
|
||||
//KO(加密數據)
|
||||
//牌加密,初始化发出的牌,目的是预防作弊,自己只能看到自己的牌
|
||||
mod_jxmj.ini_msg_hand = function (playerRoom) {
|
||||
var msg = {};
|
||||
msg.hand = [];
|
||||
for (var n = 0; n < 4; n++) {
|
||||
msg.hand[n] = [];
|
||||
for (var k = 0; k < playerRoom.hand[n].length; k++) {
|
||||
msg.hand[n][k] = [];
|
||||
for (var j = 0; j < playerRoom.hand[n][k].length; j++) {
|
||||
msg.hand[n][k][j] = -1;
|
||||
if (k > 0 && playerRoom.hand[n][k].length <= 4) {
|
||||
msg.hand[n][k][j] = playerRoom.hand[n][k][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return msg.hand;
|
||||
}
|
||||
531
codes/games/server/games/jinxian_mj/flow/flow_end_play_way.js
Normal file
531
codes/games/server/games/jinxian_mj/flow/flow_end_play_way.js
Normal file
@@ -0,0 +1,531 @@
|
||||
//结算时买马玩法,随机马牌
|
||||
//159买马玩法,输出谁买马,谁中马
|
||||
mod_jxmj.a.checkHorse = function (playerRoom, seats) {
|
||||
|
||||
//playerRoom.BuyHorse(seat);[庄、下、对、上]
|
||||
//playerRoom.identity=[0,1,0,0,1];
|
||||
var host = playerRoom.identity[4];//庄
|
||||
|
||||
var roomtype = ExArray.copyArray(playerRoom.roomtype);
|
||||
var horse_num = 1;
|
||||
if (roomtype[2] == 0)//不买马
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (roomtype[2] > 0)//买马
|
||||
{
|
||||
if (roomtype[5] > 0)//几匹马
|
||||
{
|
||||
var horse_num = roomtype[5];
|
||||
// if ()//庄家买马
|
||||
// {
|
||||
// }else
|
||||
if (roomtype[2] == 2 || roomtype[2] == 1)//胡家买马
|
||||
{ //console.log(roomtype[2])
|
||||
roomtype[2]=2;
|
||||
horse_num = horse_num * seats.length;
|
||||
//console.log(horse_num)
|
||||
//console.log(roomtype[2])
|
||||
}
|
||||
}
|
||||
}
|
||||
// if(roomtype[3]>0)//封顶
|
||||
// {
|
||||
// if(roomtype[6]>0)//多少封顶
|
||||
// {var limits=[21,32,64,88];
|
||||
// var top_limit=limits[roomtype[6]-1];
|
||||
// }
|
||||
// }
|
||||
var numpai = [[1, 5, 9, 11, 15, 19, 21, 25, 29], [2, 6, 12, 16, 22, 26], [3, 7, 13, 17, 23, 27], [4, 8, 14, 18, 24, 28]];
|
||||
var zipai = [[31, 41], [32, 42], [33, 43], [34]];
|
||||
|
||||
var arr_num = ExArray.copyArray(numpai);
|
||||
var zi_num = ExArray.copyArray(zipai);
|
||||
// for(var i=0;i<4;i++)
|
||||
// {numpai[i]=arr_num[neword[i]];
|
||||
// zipai[i]=zi_num[neword[i]];
|
||||
// }
|
||||
var next_pos4 = playerRoom.user_ctrl[8] + horse_num;//牌墙首牌
|
||||
if (next_pos4 >= playerRoom.config.pai_num) {
|
||||
next_pos4 = next_pos4 - playerRoom.config.pai_num;
|
||||
}
|
||||
var next_card4 = playerRoom.poker[next_pos4];
|
||||
if (next_card4 == -1) {
|
||||
var b = ExArray.randomArray(ExArray.quadArray(playerRoom.config.card_enum));
|
||||
if (roomtype[2] == 1)//庄家买马
|
||||
{
|
||||
for (var i = 0; i < horse_num; i++) {
|
||||
playerRoom.buyHorse[host][i] = b[i];
|
||||
}//各家买马
|
||||
}
|
||||
else if (roomtype[2] == 2)//胡家买马
|
||||
{
|
||||
for (var j = 0; j < seats.length; j++) {
|
||||
for (var i = 0; i < roomtype[5]; i++) {
|
||||
playerRoom.buyHorse[seats[j]][i] = b[i + j * (roomtype[5] - 1)];
|
||||
}//各家买马
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
var n = 0, n1 = 0;
|
||||
for (var k = 0; k < horse_num; k++) {
|
||||
var next_pos = playerRoom.user_ctrl[8] + k + 1;//牌墙首牌
|
||||
if (next_pos >= playerRoom.config.pai_num) {
|
||||
next_pos = next_pos - playerRoom.config.pai_num;
|
||||
}
|
||||
var next_card = playerRoom.poker[next_pos];
|
||||
if (next_card != -1) {
|
||||
if (roomtype[2] == 1)//庄家买马
|
||||
{
|
||||
playerRoom.buyHorse[host][k] = next_card;//各家买马
|
||||
}
|
||||
else if (roomtype[2] == 2)//胡家买马
|
||||
{
|
||||
playerRoom.buyHorse[seats[n]][n1] = next_card;//各家买马
|
||||
n1 += 1;
|
||||
if (n1 == roomtype[5]) {
|
||||
n += 1;
|
||||
n1 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
var b = ExArray.randomArray(ExArray.quadArray(playerRoom.config.card_enum));
|
||||
if (roomtype[2] == 1)//庄家买马
|
||||
{
|
||||
for (var i = 0; i < horse_num; i++){
|
||||
playerRoom.buyHorse[host][i] = b[i];
|
||||
}//各家买马
|
||||
}
|
||||
else if (roomtype[2] == 2)//胡家买马
|
||||
{
|
||||
for (var j = 0; j < seats.length; j++) {
|
||||
for (var i = 0; i < roomtype[5]; i++) {
|
||||
playerRoom.buyHorse[seats[j]][i] = b[i + j * (roomtype[5] - 1)];
|
||||
}//各家买马
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//for(var i=0;i<horse_num;i++)
|
||||
//{playerRoom.buyHorse[host]=[27,25,22,15];}//各家买马
|
||||
//playerRoom.winHorse=[[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1]];//各家中马
|
||||
if (roomtype[2] == 1)//庄家买马
|
||||
{
|
||||
var neword = [0, 1, 2, 3];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + host;
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
neword[i] = j;
|
||||
}
|
||||
for (var j = 0; j < 4; j++) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var pos = numpai[i].indexOf(playerRoom.buyHorse[host][j]);
|
||||
var pos1 = zipai[i].indexOf(playerRoom.buyHorse[host][j]);
|
||||
if (pos != -1 || pos1 != -1) {
|
||||
playerRoom.winHorse[host][j] = neword[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (roomtype[2] == 2)//胡家买马
|
||||
{
|
||||
for (var m = 0; m < seats.length; m++) {
|
||||
var k = seats[m];
|
||||
var neword = [0, 1, 2, 3];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + k;
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
neword[i] = j;
|
||||
}
|
||||
for (var j = 0; j < 4; j++) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var pos = numpai[i].indexOf(playerRoom.buyHorse[k][j]);
|
||||
var pos1 = zipai[i].indexOf(playerRoom.buyHorse[k][j]);
|
||||
if (pos != -1 || pos1 != -1) {
|
||||
playerRoom.winHorse[k][j] = neword[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//长沙扎鸟玩法,输出谁中鸟
|
||||
mod_jxmj.b.checkBird = function (playerRoom, seats) {
|
||||
return;
|
||||
|
||||
//playerRoom.BuyHorse(seat);[庄、下、对、上]
|
||||
//playerRoom.identity=[0,1,0,0,1];
|
||||
var host = playerRoom.identity[4];//庄
|
||||
var roomtype = ExArray.copyArray(playerRoom.roomtype);
|
||||
var horse_num = 0;
|
||||
if (roomtype[2] == 0)//不买马
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (roomtype[2] > 0)//买马
|
||||
{
|
||||
if (roomtype[5] > 0)//几匹马
|
||||
{
|
||||
horse_num = roomtype[5];
|
||||
if (roomtype[2] == 1)//扎鸟加倍
|
||||
{
|
||||
}
|
||||
else if (roomtype[2] == 2)//扎鸟+分
|
||||
{
|
||||
horse_num = roomtype[5] * 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
// if(roomtype[3]>0)//封顶
|
||||
// {
|
||||
// if(roomtype[6]>0)//多少封顶
|
||||
// {var limits=[21,32,64,88];
|
||||
// var top_limit=limits[roomtype[6]-1];
|
||||
// }
|
||||
// }
|
||||
var numpai = [[1, 5, 9, 11, 15, 19, 21, 25, 29], [2, 6, 12, 16, 22, 26], [3, 7, 13, 17, 23, 27], [4, 8, 14, 18, 24, 28]];
|
||||
var zipai = [[31, 41], [32, 42], [33, 43], [34]];
|
||||
|
||||
var arr_num = ExArray.copyArray(numpai);
|
||||
var zi_num = ExArray.copyArray(zipai);
|
||||
// for(var i=0;i<4;i++)
|
||||
// {numpai[i]=arr_num[neword[i]];
|
||||
// zipai[i]=zi_num[neword[i]];
|
||||
// }
|
||||
var next_pos4 = playerRoom.user_ctrl[8] + horse_num;//牌墙首牌
|
||||
if (next_pos4 >= playerRoom.config.pai_num) {
|
||||
next_pos4 = next_pos4 - playerRoom.config.pai_num;
|
||||
}
|
||||
var next_card4 = playerRoom.poker[next_pos4];
|
||||
if (next_card4 == -1) {
|
||||
var b = ExArray.randomArray(ExArray.quadArray(playerRoom.config.card_enum));
|
||||
for (var i = 0; i < horse_num; i++) {
|
||||
playerRoom.buyHorse[host][i] = b[i];
|
||||
}//各家买马
|
||||
}
|
||||
else {
|
||||
var n = 0, n1 = 0;
|
||||
for (var k = 0; k < horse_num; k++) {
|
||||
var next_pos = playerRoom.user_ctrl[8] + k + 1;//牌墙首牌
|
||||
if (next_pos >= playerRoom.config.pai_num) {
|
||||
next_pos = next_pos - playerRoom.config.pai_num;
|
||||
}
|
||||
var next_card = playerRoom.poker[next_pos];
|
||||
if (next_card != -1) {
|
||||
playerRoom.buyHorse[host][k] = next_card;//各家买马
|
||||
}
|
||||
else {
|
||||
var b = ExArray.randomArray(ExArray.quadArray(playerRoom.config.card_enum));
|
||||
for (var i = 0; i < horse_num; i++) {
|
||||
playerRoom.buyHorse[host][i] = b[i];
|
||||
}//各家买马
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//for(var i=0;i<horse_num;i++)
|
||||
//{playerRoom.buyHorse[host]=[27,25,22,15];}//各家买马
|
||||
//playerRoom.winHorse=[[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1]];//各家中马
|
||||
var neword = [0, 1, 2, 3];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + host;
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
neword[i] = j;
|
||||
}
|
||||
for (var j = 0; j < horse_num; j++) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var pos = numpai[i].indexOf(playerRoom.buyHorse[host][j]);
|
||||
var pos1 = zipai[i].indexOf(playerRoom.buyHorse[host][j]);
|
||||
if (pos != -1 || pos1 != -1) {
|
||||
playerRoom.winHorse[host][j] = neword[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//红中加码玩法,输出谁买马,谁中马
|
||||
mod_jxmj.b.checkMapai=function(playerRoom,seats)
|
||||
{
|
||||
|
||||
//playerRoom.BuyHorse(seat);[庄、下、对、上]
|
||||
//playerRoom.identity=[0,1,0,0,1];
|
||||
var host=playerRoom.identity[4];//庄
|
||||
var roomtype=ExArray.copyArray(playerRoom.roomtype);
|
||||
var horse_num=1;
|
||||
if(roomtype[2]==0)//不买马
|
||||
{return;}
|
||||
if(roomtype[2]>0)//买马
|
||||
{
|
||||
if(roomtype[5]>0)//几匹马
|
||||
{var horse_num=roomtype[5];
|
||||
if(roomtype[2]==1)//庄家买马
|
||||
{}
|
||||
else if(roomtype[2]==2)//2胡家买马
|
||||
{horse_num=2*horse_num*seats.length;
|
||||
}
|
||||
|
||||
}
|
||||
if(roomtype[2]==3)//3红中一码全中
|
||||
{horse_num=1*seats.length;}
|
||||
}
|
||||
//159奖码的无红中加码
|
||||
var horse_num_add=[0,0,0,0];
|
||||
var buy_num=[0,0,0,0];
|
||||
if(roomtype[2]==1)
|
||||
{
|
||||
for(var i=0;i<seats.length;i++)
|
||||
{buy_num[i]+=roomtype[5];}
|
||||
}
|
||||
else if(roomtype[2]==2)
|
||||
{
|
||||
if(roomtype[5]<=3)//正常159买马
|
||||
{
|
||||
for(var i=0;i<seats.length;i++)
|
||||
{buy_num[i]=roomtype[5]*2;
|
||||
var hu_card_type=playerRoom.hu_card[seats[i]][0];
|
||||
var had_jing=mod_jxmj.b.have_jing(playerRoom.hand[seats[i]],playerRoom,hu_card_type);
|
||||
//console.log("红中加码玩法"+had_jing);//console.log(playerRoom.hand[seats[i]]);
|
||||
if(!had_jing && roomtype[10]==1)
|
||||
{horse_num+=2;
|
||||
buy_num[i]+=2;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(roomtype[5]==4)//胡几奖几码
|
||||
{horse_num=0;
|
||||
for(var i=0;i<seats.length;i++)
|
||||
{
|
||||
var hu_card_type=playerRoom.hu_card[seats[i]][0];
|
||||
//console.log("红中加码玩法11=胡的牌"+hu_card_type);
|
||||
buy_num[i]=hu_card_type%10;
|
||||
if(hu_card_type==41)
|
||||
{buy_num[i]=9;}
|
||||
var had_jing=mod_jxmj.b.have_jing(playerRoom.hand[seats[i]],playerRoom,hu_card_type);
|
||||
if(!had_jing && roomtype[10]==1)
|
||||
{buy_num[i]+=1;
|
||||
}
|
||||
horse_num+=buy_num[i];
|
||||
}
|
||||
}
|
||||
}//console.log("红中加码玩法11="+buy_num);
|
||||
// if(roomtype[3]>0)//封顶
|
||||
// {
|
||||
// if(roomtype[6]>0)//多少封顶
|
||||
// {var limits=[21,32,64,88];
|
||||
// var top_limit=limits[roomtype[6]-1];
|
||||
// }
|
||||
// }
|
||||
var numpai=[[1,5,9,11,15,19,21,25,29],[2,6,12,16,22,26],[3,7,13,17,23,27],[4,8,14,18,24,28]];
|
||||
var zipai=[[31,41],[32,42],[33,43],[34]];
|
||||
|
||||
var arr_num=ExArray.copyArray(numpai);
|
||||
var zi_num=ExArray.copyArray(zipai);
|
||||
// for(var i=0;i<4;i++)
|
||||
// {numpai[i]=arr_num[neword[i]];
|
||||
// zipai[i]=zi_num[neword[i]];
|
||||
// }
|
||||
var next_pos4=playerRoom.user_ctrl[8]+horse_num;//牌墙首牌
|
||||
if(next_pos4>=playerRoom.config.pai_num)
|
||||
{next_pos4=next_pos4-playerRoom.config.pai_num;}
|
||||
var next_card4=playerRoom.poker[next_pos4];
|
||||
if(next_card4==-1)
|
||||
{var b=mod_jxmj.set_poker_wall1(playerRoom);
|
||||
if(roomtype[2]==1)//庄家买马
|
||||
{
|
||||
for(var i=0;i<horse_num;i++)
|
||||
{playerRoom.buyHorse[host][i]=b[i];}//各家买马
|
||||
}
|
||||
else if(roomtype[2]==2)//胡家买马
|
||||
{var num=0;
|
||||
for(var j=0;j<seats.length;j++)
|
||||
{
|
||||
for(var i=0;i<buy_num[j];i++)
|
||||
{playerRoom.buyHorse[seats[j]][i]=b[i+num];num+=1;}//各家买马
|
||||
}
|
||||
}
|
||||
else if(roomtype[2]==3)//一码全中
|
||||
{
|
||||
for(var j=0;j<seats.length;j++)
|
||||
{
|
||||
for(var i=0;i<1;i++)
|
||||
{playerRoom.buyHorse[seats[j]][i]=b[i+j];}//各家买马
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{var n=0,n1=0;
|
||||
for(var k=0;k<horse_num;k++)
|
||||
{var next_pos=playerRoom.user_ctrl[8]+k+1;//牌墙首牌
|
||||
if(next_pos>=playerRoom.config.pai_num)
|
||||
{next_pos=next_pos-playerRoom.config.pai_num;}
|
||||
var next_card=playerRoom.poker[next_pos];
|
||||
if(next_card!=-1)
|
||||
{
|
||||
if(roomtype[2]==1)//庄家买马
|
||||
{playerRoom.buyHorse[host][k]=next_card;//各家买马
|
||||
}
|
||||
else if(roomtype[2]==2)//胡家买马
|
||||
{playerRoom.buyHorse[seats[n]][n1]=next_card;//各家买马
|
||||
n1+=1;//console.log(buy_num[n]+"各家买马="+seats[n]);
|
||||
if(n1==buy_num[n])
|
||||
{n+=1;
|
||||
n1=0;
|
||||
}
|
||||
}
|
||||
else if(roomtype[2]==3)//一码全中
|
||||
{playerRoom.buyHorse[seats[n]][n1]=next_card;//各家买马
|
||||
n1+=1;
|
||||
if(n1==1)
|
||||
{n+=1;
|
||||
n1=0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{var b=mod_jxmj.set_poker_wall1(playerRoom);
|
||||
if(roomtype[2]==1)//庄家买马
|
||||
{
|
||||
for(var i=0;i<horse_num;i++)
|
||||
{playerRoom.buyHorse[host][i]=b[i];}//各家买马
|
||||
}
|
||||
else if(roomtype[2]==2)//胡家买马
|
||||
{var num=0;
|
||||
for(var j=0;j<seats.length;j++)
|
||||
{
|
||||
for(var i=0;i<buy_num[j];i++)
|
||||
{playerRoom.buyHorse[j][i]=b[i+num];num=+1;}//各家买马
|
||||
}
|
||||
}
|
||||
else if(roomtype[2]==3)//一码全中
|
||||
{
|
||||
for(var j=0;j<seats.length;j++)
|
||||
{
|
||||
for(var i=0;i<1;i++)
|
||||
{playerRoom.buyHorse[seats[j]][i]=b[i+j];}//各家买马
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//for(var i=0;i<horse_num;i++)
|
||||
//{playerRoom.buyHorse[host]=[27,25,22,15];}//各家买马
|
||||
//playerRoom.winHorse=[[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1]];//各家中马
|
||||
if(roomtype[2]==1)//庄家买马
|
||||
{var neword=[0,1,2,3];
|
||||
for(var i=0;i<4;i++)
|
||||
{var j=i+host;
|
||||
if(j<0)
|
||||
{j=j+4;}
|
||||
else if(j>3)
|
||||
{j=j-4;}
|
||||
neword[i]=j;
|
||||
}
|
||||
for(var j=0;j<roomtype[5]*2;j++)
|
||||
{var mode=1;//1:159买马,2:4家买马
|
||||
if(mode==1)
|
||||
{
|
||||
var pos=numpai[0].indexOf(playerRoom.buyHorse[k][j]);
|
||||
var pos1=zipai[0].indexOf(playerRoom.buyHorse[k][j]);
|
||||
if(pos!=-1 || pos1!=-1)
|
||||
{playerRoom.winHorse[k][j]=k;
|
||||
}
|
||||
}
|
||||
else if(mode==2)
|
||||
{
|
||||
for(var i=0;i<4;i++)
|
||||
{var pos=numpai[i].indexOf(playerRoom.buyHorse[k][j]);
|
||||
var pos1=zipai[i].indexOf(playerRoom.buyHorse[k][j]);
|
||||
if(pos!=-1 || pos1!=-1)
|
||||
{playerRoom.winHorse[k][j]=neword[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(roomtype[2]==2)//胡家买马
|
||||
{
|
||||
for(var m=0;m<seats.length;m++)
|
||||
{var k=seats[m];
|
||||
var neword=[0,1,2,3];
|
||||
for(var i=0;i<4;i++)
|
||||
{var j=i+k;
|
||||
if(j<0)
|
||||
{j=j+4;}
|
||||
else if(j>3)
|
||||
{j=j-4;}
|
||||
neword[i]=j;
|
||||
}
|
||||
for(var j=0;j<buy_num[m];j++)
|
||||
{
|
||||
if(roomtype[2]==2)
|
||||
{var mode=1;//1:159买马,2:4家买马
|
||||
if(mode==1)
|
||||
{//2红中159买马
|
||||
var pos=numpai[0].indexOf(playerRoom.buyHorse[k][j]);
|
||||
var pos1=zipai[0].indexOf(playerRoom.buyHorse[k][j]);
|
||||
if(pos!=-1 || pos1!=-1)
|
||||
{playerRoom.winHorse[k][j]=k;
|
||||
}
|
||||
}
|
||||
else if(mode==2)
|
||||
{//2广东159买马
|
||||
for(var i=0;i<4;i++)
|
||||
{var pos=numpai[i].indexOf(playerRoom.buyHorse[k][j]);
|
||||
var pos1=zipai[i].indexOf(playerRoom.buyHorse[k][j]);
|
||||
if(pos!=-1 || pos1!=-1)
|
||||
{playerRoom.winHorse[k][j]=neword[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(roomtype[2]==3)//红中一码全中
|
||||
{
|
||||
for(var m=0;m<seats.length;m++)
|
||||
{var k=seats[m];
|
||||
//3红中一码全中
|
||||
for(var j=0;j<roomtype[5]*2;j++)
|
||||
{
|
||||
if(playerRoom.buyHorse[k][j]>0)
|
||||
{playerRoom.winHorse[k][j]=k;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//随机牌
|
||||
mod_jxmj.set_poker_wall1=function(playerRoom)
|
||||
{var arr=[];
|
||||
for(var i=0;i<4;i++)
|
||||
{
|
||||
if(playerRoom.sea[i])
|
||||
{arr=arr.concat(playerRoom.sea[i]);}
|
||||
}
|
||||
var b=ExArray.randomArray(arr);
|
||||
return b;
|
||||
}
|
||||
@@ -0,0 +1,604 @@
|
||||
//暗杠加杠操作处理
|
||||
mod_jxmj.operate_gang_AnGang_JiaGang = function (o_room, playerRoom, seat, operate) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var r = 0;
|
||||
var throw_card = playerRoom.throw_card;
|
||||
var jing = playerRoom.jing[1];
|
||||
var jing0 = playerRoom.jing[0];
|
||||
var djing0 = playerRoom.down_jing[0];
|
||||
var djing = playerRoom.down_jing[1];
|
||||
var last_seat = playerRoom.user_ctrl[1];//上个控制权用户
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
var first_card = playerRoom.poker[pos];
|
||||
//上个操作是吃 碰,当前不发牌
|
||||
if (playerRoom.last_operate[0] == 1 || playerRoom.last_operate[0] == 3) {
|
||||
first_card = -1;
|
||||
}
|
||||
var check_gang = 1;//杠的不是刚摸的牌,是手牌
|
||||
//处理加杠
|
||||
if (operate[0] == 4 && playerRoom.user_eat_bump[seat][3] > 0)//自摸杠
|
||||
{
|
||||
playerRoom.hu_note[2] = -2;//地胡
|
||||
//var arr=mod_jxmj.bar(playerRoom.hand[seat][0],first_card);
|
||||
var arr = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
var gang_card = first_card;//gang_card=operate[1];
|
||||
var pos_gang_card = playerRoom.hand[seat][0].indexOf(gang_card);
|
||||
var ban = 0;
|
||||
//LOL
|
||||
for (var i = 1; i < arr.length; i++) {
|
||||
if (pos_gang_card == -1 && first_card && first_card == arr[i][0] && arr[i].length == 3 && arr[i][0] == arr[i][1]) {
|
||||
playerRoom.act = [5, seat, 1, [first_card]];//动作,座位,计时,相关手牌
|
||||
if (operate[2] == 1) {//红中胡
|
||||
playerRoom.act = [19, seat, 1, [first_card]]
|
||||
}
|
||||
playerRoom.guopai[seat] = 0;
|
||||
ban = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//LOL
|
||||
if (ban == 0) {
|
||||
pos_gang_card = playerRoom.hand[seat][0].indexOf(operate[1]);
|
||||
}
|
||||
for (var i = 1; i < arr.length; i++) {
|
||||
if (pos_gang_card != -1 && operate[1] == arr[i][0] && arr[i].length == 3 && arr[i][0] == arr[i][1]) {
|
||||
gang_card = operate[1];
|
||||
playerRoom.act = [5, seat, 1, [gang_card]];//动作,座位,计时,相关手牌
|
||||
if (operate[2] == 1) {
|
||||
playerRoom.act = [19, seat, 1, [gang_card]];
|
||||
}
|
||||
playerRoom.guopai[seat] = 0;
|
||||
ban = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//console.log(ban + "pos_gang_card" + gang_card + "," + JSON.stringify(playerRoom.hand[seat][0]));
|
||||
if (ban >= 1) {
|
||||
playerRoom.guopai[seat] = 0;
|
||||
//从手牌处移走 & 杠放进亮牌处
|
||||
if (playerRoom.tail_poker[7] != 1 || playerRoom.tail_poker[7] == 1 && playerRoom.tail_poker[8] == seat) {
|
||||
mod_jxmj.result_gang45(o_room, playerRoom, seat, operate[0], gang_card, operate[2], first_card);
|
||||
playerRoom.last_operate = [operate[0], gang_card, seat];
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
playerRoom.user_ctrl[3] = -1;
|
||||
}
|
||||
var gang_ban = 0;
|
||||
// if(playerRoom.tail_poker[7]==1)
|
||||
// {
|
||||
// for(var i=0;i<4;i++)
|
||||
// {//长沙
|
||||
// if(i!=seat && playerRoom.user_eat_bump[i][5]>0)
|
||||
// {gang_ban=1;
|
||||
// r=2;
|
||||
// playerRoom.peng_record[seat]=[seat,[first_card,first_card,first_card,first_card],first_card,ExArray.copyArray(operate),seat];
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//if(gang_ban==0 && playerRoom.tail_poker[7]!=1)
|
||||
if (gang_ban == 0) {
|
||||
var hu_seat = [];
|
||||
//if(operate[2]==2)//杠
|
||||
if (mod_jxmj.config.jinxian == 1&&mod_jxmj.config.nanchang == 1) {//mod_jxmj.config.qianghu//开战函数中
|
||||
hu_seat = mod_jxmj.hu_pai_dianhu(playerRoom, seat, gang_card,1);
|
||||
}//是否可抢杠胡
|
||||
if (hu_seat.length > 0) {
|
||||
r = 2;
|
||||
playerRoom.peng_record[seat] = [seat, [gang_card, gang_card, gang_card, gang_card], first_card, ExArray.copyArray(operate), seat];
|
||||
//console.log("是否可抢杠胡peng_record");
|
||||
//一炮多响
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (i != seat && hu_seat[i]) {
|
||||
playerRoom.user_eat_bump[i][5] = 3;//3抢杠胡
|
||||
playerRoom.guopai[i] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
// if (gang_card == jing||gang_card == jing0||gang_card == djing0||gang_card == djing) {
|
||||
// playerRoom.hu_note_gang_jing[seat][0] += 1;
|
||||
// }
|
||||
// else {
|
||||
playerRoom.hu_note_gang[seat][1] += 1;
|
||||
// }//自摸杠
|
||||
playerRoom.statis[seat][5] += 1;
|
||||
//处理分数 杠成功
|
||||
var jing = playerRoom.jing[1];
|
||||
var jing0 = playerRoom.jing[0];
|
||||
var djing0 = playerRoom.down_jing[0];
|
||||
var djing = playerRoom.down_jing[1];
|
||||
var beishu=1;
|
||||
var score=mod_jxmj.config.gang_score*2;
|
||||
if (mod_jxmj.config.jinxian){
|
||||
//庄家加分
|
||||
score=score*beishu;
|
||||
// if (gang_card==jing||gang_card==djing){
|
||||
// score=32;
|
||||
// }
|
||||
// if (gang_card==djing0||gang_card==jing0){
|
||||
// score=32;
|
||||
// }
|
||||
if (gang_card==jing||gang_card==jing0){
|
||||
score=32;
|
||||
}
|
||||
if(playerRoom.config.nanchang==1) {
|
||||
if (gang_card==jing||gang_card==djing||gang_card==djing0||gang_card==jing0){
|
||||
score=14;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var turn = playerRoom.turn[1];
|
||||
var base = playerRoom.roomtype[8] || 0;if(base==-1){base =0;}
|
||||
var base_score = mod_jxmj.config.base_score;
|
||||
base = base_score[base];
|
||||
|
||||
if (score==14){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat]+=score
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat]+=score;
|
||||
playerRoom.hu_note_gang[i][4] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (score==32){
|
||||
var un_peng_pos=-1;
|
||||
for (var i = 0; i < playerRoom.hand_arrow[seat].length; i++) {
|
||||
if( playerRoom.hand_arrow[seat][i][1]==gang_card && playerRoom.hand[seat][i+1].length==4)
|
||||
{
|
||||
un_peng_pos= playerRoom.hand_arrow[seat][i][0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][un_peng_pos] -= score;
|
||||
playerRoom.turn_point[turn][seat]+=score
|
||||
playerRoom.gang_score[un_peng_pos] -= score;
|
||||
playerRoom.gang_score[seat]+=score;
|
||||
playerRoom.hu_note_gang[i][4] += 1;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
if(playerRoom.config.nanchang==1){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat] += score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat] += score;
|
||||
playerRoom.hu_note_gang[i][4] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
if (i == playerRoom.identity[4]) {
|
||||
playerRoom.turn_point[turn][i] -= score * 2;
|
||||
playerRoom.turn_point[turn][seat] += score * 2;
|
||||
playerRoom.gang_score[i] -= score * 2;
|
||||
playerRoom.gang_score[seat] += score * 2;
|
||||
} else {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat] += score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat] += score;
|
||||
if (seat == playerRoom.identity[4]) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat] += score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat] += score;
|
||||
}
|
||||
}
|
||||
// if (gang_card == jing||gang_card == jing0||gang_card == djing0||gang_card == djing) {
|
||||
// playerRoom.hu_note_gang_jing[seat][2] += 1;
|
||||
// }
|
||||
// else {
|
||||
playerRoom.hu_note_gang[i][4] += 1;
|
||||
// }//被加杠//明杠、自摸杠、暗杠、点杠、被加杠、被暗杠
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//console.log("杠分:",playerRoom.gang_score)
|
||||
// for (var i = 0; i < person; i++) {
|
||||
// if (i != seat) {
|
||||
// if (i==playerRoom.identity[4]){
|
||||
// playerRoom.turn_point[turn][i] -= score*2;
|
||||
// playerRoom.turn_point[turn][seat]+=score*2;
|
||||
// playerRoom.gang_score[i] -= score*2;
|
||||
// playerRoom.gang_score[seat]+=score*2;
|
||||
// }else {
|
||||
// playerRoom.turn_point[turn][i] -= score;
|
||||
// playerRoom.turn_point[turn][seat]+=score;
|
||||
// playerRoom.gang_score[i] -= score;
|
||||
// playerRoom.gang_score[seat]+=score;
|
||||
// }
|
||||
// // if (gang_card == jing||gang_card == jing0||gang_card == djing0||gang_card == djing) {
|
||||
// // playerRoom.hu_note_gang_jing[seat][2] += 1;
|
||||
// // }
|
||||
// // else {
|
||||
// playerRoom.hu_note_gang[i][4] += 1;
|
||||
// // }//被加杠//明杠、自摸杠、暗杠、点杠、被加杠、被暗杠
|
||||
// }
|
||||
// }
|
||||
|
||||
playerRoom.hu_note[6] = [seat, 10, []];//杠炮准备
|
||||
//杠后允许摸牌
|
||||
mod_jxmj.a.set_next_card_pos(playerRoom, operate);//牌墙首牌+1
|
||||
if (operate[2] > 0) {
|
||||
mod_jxmj.judge_do_2pai_gang(playerRoom, seat, operate[2] - 1, gang_card);
|
||||
}
|
||||
else {
|
||||
var next_pos = playerRoom.user_ctrl[8];
|
||||
var next_card = playerRoom.poker[next_pos];
|
||||
playerRoom.user_ctrl[3] = next_card;
|
||||
mod_jxmj.judge_bar(playerRoom, seat);
|
||||
mod_jxmj.liuJu(playerRoom, seat);
|
||||
}
|
||||
playerRoom.peng_record = [[-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1]];
|
||||
playerRoom.chi_record = [-1, [-1], 0, -1];
|
||||
r = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
playerRoom.guopeng[seat] = [];
|
||||
playerRoom.guohu[seat] = [];
|
||||
playerRoom.guohu_point[seat] = 0;
|
||||
}
|
||||
//处理暗杠
|
||||
else if (operate[0] == 5 && playerRoom.user_eat_bump[seat][4] > 0)//暗杠
|
||||
{
|
||||
var gang_card = operate[1];
|
||||
var n = 0;
|
||||
for (var i = 0; i < playerRoom.hand[seat][0].length; i++) {
|
||||
if (playerRoom.hand[seat][0][i] == gang_card) {
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
var ban = 0;
|
||||
if (n == 3)//杠的是刚摸的牌
|
||||
{
|
||||
if (gang_card == first_card) {
|
||||
var arr = mod_jxmj.bar(playerRoom.hand[seat][0], gang_card);
|
||||
if (arr && arr.length > 0) {
|
||||
ban = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (n == 4)//杠的是4张手牌
|
||||
{
|
||||
var arr1 = ExArray.copyArray(playerRoom.hand[seat][0]);
|
||||
ExArray.ordArray(arr1);
|
||||
for (var i = 0; i < arr1.length - 3; i++) {
|
||||
if (gang_card == arr1[i] && arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2] && arr1[i] == arr1[i + 3]) {
|
||||
ban = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//console.log("暗杠=" + ban + "," + playerRoom.tail_poker[7]);
|
||||
|
||||
if (ban > 0) {
|
||||
playerRoom.hu_note[2] = -2;//地胡
|
||||
var gang_ban = 0;
|
||||
// if(playerRoom.tail_poker[7]==1)
|
||||
{
|
||||
for(var i=0;i<4;i++)
|
||||
{//长沙
|
||||
if(i!=seat && playerRoom.user_eat_bump[i][5]>0)
|
||||
{gang_ban=1;
|
||||
r=2;
|
||||
playerRoom.peng_record[seat]=[seat,[gang_card,gang_card,gang_card,gang_card],first_card,ExArray.copyArray(operate),seat];
|
||||
playerRoom.user_eat_bump[seat]=[0, 0, 0, 0, 0, 0, 0, 0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(gang_ban==0)
|
||||
{
|
||||
}
|
||||
}
|
||||
//console.log("//暗杠=" + gang_ban);
|
||||
//if(gang_ban==1)
|
||||
//{}
|
||||
//else if(playerRoom.tail_poker[7]!=1)
|
||||
if (gang_ban == 0) {//if(ban==2 && playerRoom.user_ctrl[3]>0)
|
||||
playerRoom.last_operate = [operate[0], gang_card, seat];
|
||||
playerRoom.guopai[seat] = 0;
|
||||
|
||||
mod_jxmj.result_gang45(o_room, playerRoom, seat, operate[0], gang_card, operate[2],first_card);
|
||||
playerRoom.hu_note[6] = [seat, 10, []];//杠炮准备
|
||||
//杠后允许摸牌
|
||||
mod_jxmj.a.set_next_card_pos(playerRoom, operate);//牌墙首牌+1
|
||||
// if(operate[2]>0)
|
||||
// {mod_jxmj.judge_do_2pai_gang(playerRoom,seat,operate[2]-1,gang_card);
|
||||
// //console.log("1operate="+JSON.stringify(playerRoom.tail_poker));
|
||||
// }
|
||||
// else
|
||||
{
|
||||
var next_pos = playerRoom.user_ctrl[8];
|
||||
var next_card = playerRoom.poker[next_pos];
|
||||
playerRoom.user_ctrl[3] = next_card;
|
||||
mod_jxmj.judge_bar(playerRoom, seat);
|
||||
mod_jxmj.liuJu(playerRoom, seat);
|
||||
}
|
||||
playerRoom.peng_record = [[-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1]];
|
||||
playerRoom.chi_record = [-1, [-1], 0, -1];
|
||||
r = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
//暗杠加杠成功后的部分处理
|
||||
mod_jxmj.result_gang45 = function (o_room, playerRoom, seat, operate0, gang_card, operate2, first_card) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var jing = playerRoom.jing[1];
|
||||
var jing0 = playerRoom.jing[0];
|
||||
var djing0 = playerRoom.down_jing[0];
|
||||
var djing = playerRoom.down_jing[1];
|
||||
if (operate0 == 4) {//从手牌处移走 & 杠放进亮牌处
|
||||
var pos_gang_card = playerRoom.hand[seat][0].indexOf(gang_card);
|
||||
if (pos_gang_card != -1) {
|
||||
playerRoom.hand[seat][0].splice(pos_gang_card, 1);
|
||||
//console.log("************" + JSON.stringify(playerRoom.hand[seat][0]))
|
||||
//playerRoom.hand[seat][0]=playerRoom.hand[seat][0].concat(gang_card);
|
||||
if (first_card && first_card > 0 && first_card != gang_card) {
|
||||
playerRoom.hand[seat][0] = playerRoom.hand[seat][0].concat(first_card);
|
||||
}
|
||||
}
|
||||
var l = playerRoom.hand[seat].length;
|
||||
for (var i = 1; i < l; i++) {
|
||||
var pai0 = playerRoom.hand[seat][i][0];
|
||||
if (pai0 == gang_card && pai0 == playerRoom.hand[seat][i][1]) {
|
||||
playerRoom.hand[seat][i] = [gang_card, gang_card, gang_card, gang_card];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (seat == playerRoom.lastbar[0]) {
|
||||
playerRoom.lastbar[2] += 1;
|
||||
}
|
||||
else {
|
||||
playerRoom.lastbar[2] = 1;
|
||||
}
|
||||
var bar_n = playerRoom.lastbar[2];
|
||||
playerRoom.lastbar = [seat, 1, bar_n];//谁杠,什么杠:0普通1自摸2暗杠
|
||||
if (playerRoom.tail_poker[7] == 0) {
|
||||
var pos = playerRoom.tail_poker[1];
|
||||
if (pos != -1) {
|
||||
playerRoom.poker[pos] = -1;
|
||||
}
|
||||
}//自摸后牌墙手牌清空
|
||||
else if (playerRoom.tail_poker[7] == 1) {
|
||||
var pos = playerRoom.tail_poker[1];
|
||||
if (pos != -1) {
|
||||
playerRoom.poker[pos] = -1;
|
||||
}
|
||||
var pos = playerRoom.tail_poker[2];
|
||||
if (pos != -1) {
|
||||
playerRoom.poker[pos] = -1;
|
||||
}
|
||||
}
|
||||
else if (playerRoom.tail_poker[7] == -1) {
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
if (pos != -1) {
|
||||
playerRoom.poker[pos] = -1;
|
||||
}
|
||||
}//自摸后牌墙手牌清空
|
||||
}
|
||||
else if (operate0 == 5) {
|
||||
// if (gang_card == jing||gang_card == jing0||gang_card == djing0||gang_card == djing) {
|
||||
// playerRoom.hu_note_gang_jing[seat][1] += 1;
|
||||
// }
|
||||
// else {
|
||||
playerRoom.hu_note_gang[seat][2] += 1;
|
||||
// }//暗杠
|
||||
playerRoom.statis[seat][3] += 1;
|
||||
//处理分数
|
||||
var beishu=1;
|
||||
var score=mod_jxmj.config.gang_score*2;
|
||||
if (mod_jxmj.config.jinxian){
|
||||
//庄家加分
|
||||
score=score*beishu;
|
||||
if (gang_card==jing||gang_card==jing0){
|
||||
score=32;
|
||||
}
|
||||
if(playerRoom.config.nanchang==1) {
|
||||
if (gang_card==jing||gang_card==djing||gang_card==djing0||gang_card==jing0){
|
||||
score=14;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var turn = playerRoom.turn[1];
|
||||
var base = playerRoom.roomtype[8] || 0;if(base==-1){base =0;}
|
||||
var base_score = mod_jxmj.config.base_score;
|
||||
base = base_score[base];
|
||||
playerRoom.an_gang_num[seat] += 1;
|
||||
if (score==32||score==14){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat]+=score
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat]+=score;
|
||||
playerRoom.hu_note_gang[i][5] += 1;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
if(playerRoom.config.nanchang==1){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score*2;
|
||||
playerRoom.turn_point[turn][seat] += score*2;
|
||||
playerRoom.gang_score[i] -= score*2;
|
||||
playerRoom.gang_score[seat] += score*2;
|
||||
playerRoom.hu_note_gang[i][5] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
//
|
||||
if (i == playerRoom.identity[4]) {
|
||||
playerRoom.turn_point[turn][i] -= score * 2;
|
||||
playerRoom.turn_point[turn][seat] += score * 2;
|
||||
playerRoom.gang_score[i] -= score * 2;
|
||||
playerRoom.gang_score[seat] += score * 2;
|
||||
} else {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat] += score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat] += score;
|
||||
if (seat == playerRoom.identity[4]) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat] += score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat] += score;
|
||||
}
|
||||
}
|
||||
// if (gang_card == jing||gang_card == jing0||gang_card == djing0||gang_card == djing) {
|
||||
// playerRoom.hu_note_gang_jing[i][3] += 1;
|
||||
// }
|
||||
// else {
|
||||
playerRoom.hu_note_gang[i][5] += 1;
|
||||
// }//被暗杠
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//console.log("杠分:",playerRoom.gang_score)
|
||||
playerRoom.hu_note[2] = -2;//地胡
|
||||
var n = 0;
|
||||
for (var i = 0; i < playerRoom.hand[seat][0].length; i++) {
|
||||
if (playerRoom.hand[seat][0][i] == gang_card) {
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
if (first_card && first_card > 0 && first_card != gang_card) {
|
||||
playerRoom.hand[seat][0] = playerRoom.hand[seat][0].concat(first_card);
|
||||
}
|
||||
var l = playerRoom.ag[seat].length;
|
||||
playerRoom.ag[seat][l] = gang_card;//已经亮的暗杠的牌值
|
||||
var l = playerRoom.hand_arrow[seat].length;
|
||||
playerRoom.hand_arrow[seat][l] = [-1, -1];
|
||||
playerRoom.act = [6, seat, 1, [gang_card, gang_card, gang_card, gang_card], -1];//动作,座位,计时,相关手牌
|
||||
if (operate2 == 1) {
|
||||
playerRoom.act = [19, seat, 1, [gang_card, gang_card, gang_card, gang_card], -1];
|
||||
}
|
||||
if (seat == playerRoom.lastbar[0]) {
|
||||
playerRoom.lastbar[2] += 1;
|
||||
}
|
||||
else {
|
||||
playerRoom.lastbar[2] = 1;
|
||||
}
|
||||
var bar_n = playerRoom.lastbar[2];
|
||||
playerRoom.lastbar = [seat, 2, bar_n];//谁杠,什么杠:0普通1自摸2暗杠
|
||||
|
||||
//从手牌处移走 & 杠放到亮牌处
|
||||
if (playerRoom.tail_poker[7] != 1 || playerRoom.tail_poker[7] == 1 && playerRoom.tail_poker[8] == seat) {//mod_jxmj.result_gang45(o_room,playerRoom,seat,operate[0],gang_card);
|
||||
playerRoom.last_operate = [operate0, gang_card, seat];
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
playerRoom.user_ctrl[3] = -1;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var pos_gang = playerRoom.hand[seat][0].indexOf(gang_card);
|
||||
if (pos_gang != -1) {
|
||||
playerRoom.hand[seat][0].splice(pos_gang, 1);
|
||||
}
|
||||
}
|
||||
var l = playerRoom.hand[seat].length;
|
||||
playerRoom.hand[seat][l] = [gang_card, gang_card, gang_card, gang_card];
|
||||
}
|
||||
if (playerRoom.tail_poker[7] == 0) {
|
||||
var pos = playerRoom.tail_poker[1];
|
||||
if (pos != -1) {
|
||||
playerRoom.poker[pos] = -1;
|
||||
}
|
||||
}//暗杠牌后:牌墙手牌清空
|
||||
else if (playerRoom.tail_poker[7] == 1) {
|
||||
var pos = playerRoom.tail_poker[1];
|
||||
if (pos != -1) {
|
||||
playerRoom.poker[pos] = -1;
|
||||
}
|
||||
var pos = playerRoom.tail_poker[2];
|
||||
if (pos != -1) {
|
||||
playerRoom.poker[pos] = -1;
|
||||
}
|
||||
}
|
||||
else if (playerRoom.tail_poker[7] == -1) {
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
if (pos != -1) {
|
||||
playerRoom.poker[pos] = -1;
|
||||
}
|
||||
}//暗杠牌后:牌墙手牌清空
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
mod_jxmj.operate_AnGang_record=function (o_room,playerRoom,seat,operate) {
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
var first_card = playerRoom.poker[pos];
|
||||
//上个操作是吃 碰,当前不发牌
|
||||
if (playerRoom.last_operate[0] == 1 || playerRoom.last_operate[0] == 3) {
|
||||
first_card = -1;
|
||||
}
|
||||
if (operate[0] == 5 && playerRoom.user_eat_bump[seat][4] > 0)//暗杠
|
||||
{
|
||||
var gang_card = operate[1];
|
||||
var n = 0;
|
||||
for (var i = 0; i < playerRoom.hand[seat][0].length; i++) {
|
||||
if (playerRoom.hand[seat][0][i] == gang_card) {
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
var ban = 0;
|
||||
if (n == 3)//杠的是刚摸的牌
|
||||
{
|
||||
if (gang_card == first_card) {
|
||||
var arr = mod_jxmj.bar(playerRoom.hand[seat][0], gang_card);
|
||||
if (arr && arr.length > 0) {
|
||||
ban = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (n == 4)//杠的是4张手牌
|
||||
{
|
||||
var arr1 = ExArray.copyArray(playerRoom.hand[seat][0]);
|
||||
ExArray.ordArray(arr1);
|
||||
for (var i = 0; i < arr1.length - 3; i++) {
|
||||
if (gang_card == arr1[i] && arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2] && arr1[i] == arr1[i + 3]) {
|
||||
ban = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//console.log("暗杠=" + ban + "," + playerRoom.tail_poker[7]);
|
||||
if (ban > 0) {
|
||||
playerRoom.hu_note[2] = -2;//地胡
|
||||
var gang_ban = 0;
|
||||
//if(playerRoom.tail_poker[7]==1)
|
||||
{
|
||||
for (var i = 0; i < 4; i++) {//长沙
|
||||
if (i != seat && playerRoom.user_eat_bump[i][5] > 0) {
|
||||
gang_ban = 1;
|
||||
r = 2;
|
||||
playerRoom.peng_record[seat] = [seat, [gang_card, gang_card, gang_card, gang_card], first_card, ExArray.copyArray(operate), seat];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (gang_ban == 0) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,498 @@
|
||||
//处理普通吃碰杠过的牌(除暗杠、加杠、胡外)
|
||||
mod_jxmj.get_common_oparate_poker = function (o_room, playerRoom, seat, operate) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var arr = [];
|
||||
var throw_card = playerRoom.throw_card;
|
||||
//碰||明杠||吃 throw_card为数组(长沙杠玩法)
|
||||
if (operate[0] <= 3 && operate[0] > 0 && ExObject.isArray(throw_card)) {
|
||||
if (operate[0] < 3) {
|
||||
throw_card = operate[1];
|
||||
var card_pos = playerRoom.throw_card.indexOf(throw_card);//验证throw_card是否合法
|
||||
if (card_pos == -1) {
|
||||
throw_card = -1;
|
||||
}
|
||||
}
|
||||
else if (operate[0] == 3) {
|
||||
if (operate[1] < 3) {
|
||||
if (operate[2] == 0) {
|
||||
throw_card = playerRoom.throw_card[0];
|
||||
}
|
||||
else if (operate[2] == 1) {
|
||||
throw_card = playerRoom.throw_card[1];
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw_card = playerRoom.throw_card[1];
|
||||
operate[1] -= 3;
|
||||
}
|
||||
}
|
||||
var pos = playerRoom.throw_card.indexOf(throw_card);
|
||||
if (pos == -1) {
|
||||
return arr;
|
||||
}
|
||||
}
|
||||
var near_seat = seat - 1;//上家用户座位号
|
||||
if (near_seat < 0) {
|
||||
near_seat = person - 1;
|
||||
}
|
||||
var sea_seat = playerRoom.last_operate[2];
|
||||
//碰
|
||||
if (operate[0] == 1 && playerRoom.user_eat_bump[seat][1] == 1) {
|
||||
var arr0 = mod_jxmj.bump(playerRoom.hand[seat][0], throw_card);
|
||||
//console.log(arr0);
|
||||
if (arr0 && arr0.length > 0) {
|
||||
//碰操作
|
||||
playerRoom.act = [2, seat, 1, [throw_card, throw_card], sea_seat];//动作,座位,计时,相关手牌
|
||||
playerRoom.peng_record[seat] = [seat, arr0, throw_card, ExArray.copyArray(operate), sea_seat];
|
||||
playerRoom.guopai[seat] = 0;
|
||||
//清空其他操作
|
||||
|
||||
for (var j = 0; j < 4; j++) {
|
||||
for (var i = 0; i < 7; i++) {
|
||||
if (i != 5) {
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
playerRoom.user_eat_bump[seat] = [0, 0, 0, 0, 0, 0, 0, 0];//杠碰吃、自摸杠暗杠、胡、听
|
||||
var ban = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
//if(playerRoom.user_eat_bump[i][5]>0)
|
||||
if (i != seat && playerRoom.user_eat_bump[i][5] > 0 || playerRoom.user_eat_bump[i][1] > 0 || playerRoom.user_eat_bump[i][0] > 0 || playerRoom.user_eat_bump[i][3] > 0 || playerRoom.user_eat_bump[i][4] > 0) {
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ban == 0) {
|
||||
//没人可胡
|
||||
for (var i = 0; i < 4; i++) {//长沙
|
||||
if (i != seat && playerRoom.peng_record[i][0] > -1) {
|
||||
ban = 1;
|
||||
arr = mod_jxmj.re_common_oparate(o_room, playerRoom, seat, operate, sea_seat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {//长沙
|
||||
if (i != seat && playerRoom.operate_hu_note[seat][0] > 0) {
|
||||
ban = 1;
|
||||
arr = mod_jxmj.re_common_oparate(o_room, playerRoom, seat, operate, sea_seat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ban == 0) {
|
||||
playerRoom.hu_note[2] = -2;//地胡
|
||||
mod_jxmj.b.clear_tail_2pai(playerRoom, throw_card);//长沙
|
||||
playerRoom.record_ctrl_pos = [seat, throw_card];
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];//吃清空
|
||||
arr = ExArray.copyArray(arr0);
|
||||
var last_seat = playerRoom.user_ctrl[1];
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
last_seat = -1;
|
||||
}
|
||||
mod_jxmj.seatohand(playerRoom, arr, operate[0], seat, throw_card, last_seat);
|
||||
playerRoom.peng_record = [[-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1]];
|
||||
playerRoom.chi_record = [-1, [-1], 0, -1];
|
||||
playerRoom.last_operate = [operate[0], throw_card, seat];
|
||||
playerRoom.peng_chi_num[seat][sea_seat] += 1;
|
||||
var l = playerRoom.hand_arrow[seat].length;
|
||||
playerRoom.hand_arrow[seat][l] = [sea_seat, throw_card];
|
||||
playerRoom.act_pai = [operate[0], seat, throw_card, sea_seat, -1];//牌的动画[1put,2peng,3chi,4gang,5hu,本次操作的座位,上个操作的牌,上个操作的牌池/自摸杠的座位]
|
||||
playerRoom.hu_note[6] = [-1, -1, []];//杠炮清空
|
||||
//mod_jxmj.judge_bar_an_gang(playerRoom, seat);//LOL
|
||||
playerRoom.tail_poker = [playerRoom.tail_poker[0], -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
}
|
||||
}
|
||||
}
|
||||
//明杠
|
||||
else if (operate[0] == 2 && playerRoom.user_eat_bump[seat][0] == 1) {
|
||||
var arr0 = mod_jxmj.bar(playerRoom.hand[seat][0], throw_card);
|
||||
if (arr0 && arr0.length > 0) {
|
||||
playerRoom.act = [3, seat, 1, [throw_card, throw_card, throw_card], sea_seat];//动作,座位,计时,相关手牌
|
||||
if (operate[2] == 1) {
|
||||
playerRoom.act = [19, seat, 1, [throw_card, throw_card, throw_card], sea_seat];
|
||||
}
|
||||
playerRoom.peng_record[seat] = [seat, arr0, throw_card, ExArray.copyArray(operate), sea_seat];
|
||||
playerRoom.guopai[seat] = 0;
|
||||
playerRoom.user_eat_bump[seat] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
//清空其他操作
|
||||
for (var j = 0; j < 4; j++) {
|
||||
for (var i = 0; i < 7; i++) {
|
||||
if (i != 5) {
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(mod_jxmj.config.jinxian == 1 && mod_jxmj.config.nanchang == 0) {
|
||||
for (var j = seat + 1; ; j++) { //清空下家操作
|
||||
if (j == person) {
|
||||
j = 0;
|
||||
}
|
||||
if (j == playerRoom.last_operate[2]) {
|
||||
break;
|
||||
}
|
||||
|
||||
for (var i = 0; i < 7; i++) {
|
||||
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
var ban = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
//if(playerRoom.user_eat_bump[i][5]>0)
|
||||
if (i != seat && playerRoom.user_eat_bump[i][5] > 0 || playerRoom.user_eat_bump[i][1] > 0 || playerRoom.user_eat_bump[i][2] > 0 || playerRoom.user_eat_bump[i][3] > 0 || playerRoom.user_eat_bump[i][4] > 0) {
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(ban == 0 && mod_jxmj.config.jinxian == 1 && mod_jxmj.config.nanchang == 0) {
|
||||
playerRoom.user_eat_bump[seat] = [0, 0, 0, 0, 0, 0, 0, 0];//杠碰吃、自摸杠暗杠、胡、听
|
||||
}
|
||||
|
||||
//处理分数 不论是否杠成功
|
||||
//进贤麻将,杠后算分
|
||||
// var jing = playerRoom.jing[1];
|
||||
// var jing0 = playerRoom.jing[0];
|
||||
// var djing0 = playerRoom.down_jing[0];
|
||||
// var djing = playerRoom.down_jing[1];
|
||||
// var beishu=1;
|
||||
// var score=mod_jxmj.config.gang_score*1;
|
||||
// if (mod_jxmj.config.jinxian){
|
||||
// //庄家加分
|
||||
// if (seat==playerRoom.identity[4]) {
|
||||
// beishu+=1;
|
||||
// }
|
||||
// score=score*beishu;
|
||||
// if (throw_card==jing||throw_card==jing0||throw_card==djing0||throw_card==djing){
|
||||
// score=32;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// var turn=playerRoom.turn[1];
|
||||
// var base=playerRoom.roomtype[8] || 0;
|
||||
// var base_score=mod_jxmj.config.base_score;
|
||||
// base=base_score[base];
|
||||
// playerRoom.turn_point[turn][seat]+=score;
|
||||
// playerRoom.turn_point[turn][sea_seat]-=score;
|
||||
// playerRoom.hu_note_gang[seat][0]=playerRoom.hu_note_gang[seat][0] || [];
|
||||
// var l=playerRoom.hu_note_gang[seat][0].length;
|
||||
// playerRoom.hu_note_gang[seat][0][l]=[seat,sea_seat];//明杠
|
||||
// playerRoom.hu_note_gang[sea_seat][3]+=1;//点杠
|
||||
|
||||
//处理杠之前的胡抚州
|
||||
// for(var i=0;i<4;i++)
|
||||
// {
|
||||
// if(playerRoom.operate_hu_note[i][0]>0)
|
||||
// {mod_jxmj.operate_hu_1(o_room,playerRoom,i);
|
||||
// ban=1;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
if (ban == 0) {
|
||||
for (var i = 0; i < 4; i++) {//长沙
|
||||
if (i != seat && playerRoom.peng_record[i][0] > -1) {
|
||||
ban = 1;
|
||||
arr = mod_jxmj.re_common_oparate(o_room, playerRoom, seat, operate, sea_seat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ban == 0) {
|
||||
if(mod_jxmj.config.jinxian == 1 && mod_jxmj.config.nanchang == 0) {
|
||||
playerRoom.hu_note[2] = -2;//地胡
|
||||
playerRoom.whohu = [-1, -1, -1, -1];
|
||||
playerRoom.operate_hu_note = [[0, 0], [0, 0], [0, 0], [0, 0]];
|
||||
}
|
||||
playerRoom.hu_card = [[0, 0], [0, 0], [0, 0], [0, 0]];
|
||||
playerRoom.record_ctrl_pos = [seat, throw_card];
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];//吃清空
|
||||
arr = ExArray.copyArray(arr0);
|
||||
playerRoom.peng_record = [[-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1]];
|
||||
playerRoom.chi_record = [-1, [-1], 0, -1];
|
||||
playerRoom.last_operate = [operate[0], throw_card, seat];
|
||||
playerRoom.peng_chi_num[seat][sea_seat] += 1;
|
||||
var l = playerRoom.hand_arrow[seat].length;
|
||||
playerRoom.hand_arrow[seat][l] = [sea_seat, throw_card];
|
||||
playerRoom.hu_note[6] = [seat, 10, []];//杠炮准备
|
||||
|
||||
//杠后允许摸牌
|
||||
mod_jxmj.a.set_next_card_pos(playerRoom);//牌墙首牌+1
|
||||
if (operate[2] > 0) {
|
||||
mod_jxmj.judge_do_2pai_gang(playerRoom, seat, operate[2] - 1);
|
||||
}
|
||||
else {
|
||||
var last_seat = playerRoom.user_ctrl[1];
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
last_seat = -1;
|
||||
}
|
||||
mod_jxmj.seatohand(playerRoom, arr, operate[0], seat, throw_card, last_seat);
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
var first_card = playerRoom.poker[pos];
|
||||
playerRoom.user_ctrl[3] = first_card;
|
||||
mod_jxmj.judge_bar(playerRoom, seat);
|
||||
mod_jxmj.liuJu(playerRoom, seat);
|
||||
playerRoom.tail_poker = [playerRoom.tail_poker[0], -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
}
|
||||
|
||||
if (seat == playerRoom.lastbar[0]) {
|
||||
playerRoom.lastbar[2] += 1;
|
||||
}
|
||||
else {
|
||||
playerRoom.lastbar[2] = 1;
|
||||
}
|
||||
var bar_n = playerRoom.lastbar[2];
|
||||
playerRoom.lastbar = [seat, 0, bar_n];//谁杠,什么杠:0普通1自摸2暗杠
|
||||
|
||||
//进贤麻将,杠后算分
|
||||
var jing = playerRoom.jing[1];
|
||||
var jing0 = playerRoom.jing[0];
|
||||
var djing0 = playerRoom.down_jing[0];
|
||||
var djing = playerRoom.down_jing[1];
|
||||
var beishu=1;
|
||||
var score=mod_jxmj.config.gang_score*1;
|
||||
if (mod_jxmj.config.jinxian){
|
||||
//庄家加分
|
||||
score=score*beishu;
|
||||
|
||||
if (throw_card==jing||throw_card==jing0){
|
||||
score=32;
|
||||
}
|
||||
if(playerRoom.config.nanchang==1) {
|
||||
if (throw_card==jing||throw_card==djing||throw_card==djing0||throw_card==jing0){
|
||||
score=14;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var turn=playerRoom.turn[1];
|
||||
var base=playerRoom.roomtype[8] || 0;
|
||||
var base_score=mod_jxmj.config.base_score;
|
||||
base=base_score[base];
|
||||
|
||||
if (score==14){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat]+=score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat]+=score;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (score==32){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][sea_seat] -= score;
|
||||
playerRoom.turn_point[turn][seat]+=score;
|
||||
playerRoom.gang_score[sea_seat] -= score;
|
||||
playerRoom.gang_score[seat]+=score;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
// for (var i = 0; i < person; i++) {
|
||||
// if (i != seat) {
|
||||
// if (i==playerRoom.identity[4]){
|
||||
// playerRoom.turn_point[turn][i] -= score*2;
|
||||
// playerRoom.turn_point[turn][seat]+=score*2;
|
||||
// playerRoom.gang_score[i] -= score*2;
|
||||
// playerRoom.gang_score[seat]+=score*2;
|
||||
// }else {
|
||||
// playerRoom.turn_point[turn][i] -= score;
|
||||
// playerRoom.turn_point[turn][seat]+=score
|
||||
// playerRoom.gang_score[i] -= score;
|
||||
// playerRoom.gang_score[seat]+=score;
|
||||
// if (seat==playerRoom.identity[4]) {
|
||||
// playerRoom.turn_point[turn][i] -= score;
|
||||
// playerRoom.turn_point[turn][seat]+=score;
|
||||
// playerRoom.gang_score[i] -= score;
|
||||
// playerRoom.gang_score[seat]+=score;
|
||||
// }
|
||||
// }
|
||||
// if (i==sea_seat) {
|
||||
// playerRoom.turn_point[turn][i] -= score*2;
|
||||
// playerRoom.turn_point[turn][seat]+=score*2
|
||||
// playerRoom.gang_score[i] -= score*2;
|
||||
// playerRoom.gang_score[seat]+=score*2;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
if(playerRoom.config.nanchang==1){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat] += score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat] += score;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
var fan = [score, score, score, score];
|
||||
if (seat == playerRoom.identity[4]) {
|
||||
for (var j = 0; j < person; j++) {
|
||||
fan[j] *= 2;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
if (i == playerRoom.identity[4]) {
|
||||
fan[i] *= 2;
|
||||
}
|
||||
if (i == sea_seat) {
|
||||
fan[i] *= 2;
|
||||
}
|
||||
playerRoom.turn_point[turn][i] -= fan[i];
|
||||
playerRoom.turn_point[turn][seat] += fan[i];
|
||||
playerRoom.gang_score[i] -= fan[i];
|
||||
playerRoom.gang_score[seat] += fan[i];
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fan=[score,score,score,score];
|
||||
//console.log("杠分:",playerRoom.gang_score)
|
||||
|
||||
// if (throw_card == jing) {
|
||||
// playerRoom.hu_note_gang_jing[seat][0] += 1;
|
||||
// for (var i = 0; i < person; i++) {
|
||||
// if (i != seat) {
|
||||
// playerRoom.hu_note_gang_jing[i][2] += 1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
playerRoom.hu_note_gang[seat][0] = playerRoom.hu_note_gang[seat][0] || [];
|
||||
var l = playerRoom.hu_note_gang[seat][0].length;
|
||||
playerRoom.hu_note_gang[seat][0][l] = [seat, sea_seat];//明杠
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.hu_note_gang[i][3] += 1;
|
||||
}
|
||||
}
|
||||
// }
|
||||
playerRoom.statis[seat][4] += 1;
|
||||
// if(playerRoom.hu_note[8]==11)//地杠
|
||||
// {}
|
||||
// else
|
||||
// {//包杠
|
||||
// for(var i=0;i<4;i++)
|
||||
// {
|
||||
// if(i!=seat && i!=sea_seat)
|
||||
// {var l=playerRoom.hu_note_gang[i][0].length;
|
||||
// playerRoom.hu_note_gang[i][0][l]=[seat,sea_seat];//明杠
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
playerRoom.act_pai = [operate[0], seat, throw_card, sea_seat, -1];//牌的动画[1 put,2peng,3chi,4gang,5hu ,本次操作的座位,上个操作的牌,上个操作的牌池/自摸杠的座位]
|
||||
if (playerRoom.hu_note[8] == 11) ;//地杠
|
||||
{
|
||||
playerRoom.hu_note[8] = seat;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (operate[0] == 3 && playerRoom.user_eat_bump[seat][2] == 1 && playerRoom.user_ctrl[1] == near_seat) {
|
||||
var arr0 = mod_jxmj.eat(playerRoom.hand[seat][0], throw_card);
|
||||
arr0 = ExArray.copyArray(arr0[operate[1]]);
|
||||
//console.log("吃=" + JSON.stringify(arr0));
|
||||
//if(throw_card<30 && arr0 && arr0.length>0)
|
||||
if (arr0 && arr0.length > 0) {
|
||||
playerRoom.act = [4, seat, 1, arr0, near_seat];//动作,座位,计时,相关手牌
|
||||
playerRoom.chi_record = [seat, arr0, throw_card, near_seat];
|
||||
playerRoom.guopai[seat] = 0;
|
||||
var ban = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (i != seat && playerRoom.guopai[i] == 1) {
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
playerRoom.user_eat_bump[seat] = [0, 0, 0, 0, 0, 0, 0, 0];//杠碰吃、自摸杠暗杠、胡、听
|
||||
for (var i = 0; i < 4; i++) {
|
||||
//if(playerRoom.user_eat_bump[i][5]>0)
|
||||
if (i != seat) {
|
||||
if (playerRoom.user_eat_bump[i][5] > 0 || playerRoom.user_eat_bump[i][1] > 0 || playerRoom.user_eat_bump[i][0] > 0 || playerRoom.user_eat_bump[i][3] > 0 || playerRoom.user_eat_bump[i][4] > 0) {
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ban == 0) {
|
||||
for (var i = 0; i < 4; i++) {//长沙
|
||||
if (i != seat && playerRoom.peng_record[i][0] > -1) {
|
||||
ban = 1;
|
||||
arr = mod_jxmj.re_common_oparate(o_room, playerRoom, seat, operate, sea_seat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ban == 0) {
|
||||
playerRoom.hu_note[2] = -2;//地胡
|
||||
mod_jxmj.b.clear_tail_2pai(playerRoom, throw_card);
|
||||
playerRoom.record_ctrl_pos = [seat, throw_card];
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];//吃清空
|
||||
arr = ExArray.copyArray(arr0);
|
||||
var last_seat = playerRoom.user_ctrl[1];
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
last_seat = -1;
|
||||
}
|
||||
mod_jxmj.seatohand(playerRoom, arr, operate[0], seat, throw_card, last_seat);
|
||||
playerRoom.peng_record = [[-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1]];
|
||||
playerRoom.chi_record = [-1, [-1], 0, -1];
|
||||
playerRoom.last_operate = [operate[0], throw_card, seat];
|
||||
playerRoom.peng_chi_num[seat][sea_seat] += 1;
|
||||
var l = playerRoom.hand_arrow[seat].length;
|
||||
playerRoom.hand_arrow[seat][l] = [sea_seat, throw_card];
|
||||
playerRoom.act_pai = [operate[0], seat, throw_card, sea_seat, -1];//牌的动画[1 put,2peng,3chi,4gang,5hu ,本次操作的座位,上个操作的牌,上个操作的牌池/自摸杠的座位]
|
||||
playerRoom.sound = 100 + 1;
|
||||
playerRoom.hu_note[6] = [-1, -1, []];//杠炮清空
|
||||
//mod_jxmj.judge_bar_an_gang(playerRoom, seat);
|
||||
playerRoom.tail_poker = [playerRoom.tail_poker[0], -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (operate[0] == 6) {
|
||||
var arr = mod_jxmj.operate_guo(o_room, playerRoom, seat, operate);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
//吃碰明杠成功后的部分处理
|
||||
mod_jxmj.seatohand = function (playerRoom, arr0, operate0, seat, throw_card, last_seat) {
|
||||
if (operate0 == 6) {
|
||||
seat = playerRoom.last_operate[2];
|
||||
}
|
||||
if (playerRoom.record_ctrl_pos[0] > -1) {
|
||||
seat = playerRoom.record_ctrl_pos[0];
|
||||
throw_card = playerRoom.record_ctrl_pos[1];
|
||||
}
|
||||
//console.log("放到亮牌处=" + seat + "," + JSON.stringify(arr0));
|
||||
playerRoom.guopai = [0, 0, 0, 0];
|
||||
var l = playerRoom.hand[seat].length;
|
||||
playerRoom.hand[seat][l] = ExArray.copyArray(arr0);
|
||||
|
||||
//从手牌处——放到亮牌处
|
||||
var arr1 = ExArray.copyArray(arr0);
|
||||
var card_pos = arr0.indexOf(throw_card);
|
||||
if (card_pos != -1) {
|
||||
arr1.splice(card_pos, 1);
|
||||
}
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
var card_pos = playerRoom.hand[seat][0].indexOf(arr1[i]);
|
||||
playerRoom.hand[seat][0].splice(card_pos, 1);
|
||||
}
|
||||
//从河牌处——放到亮牌处
|
||||
if (last_seat > -1) {
|
||||
var len = playerRoom.sea[last_seat].length;
|
||||
if (len > 0 && playerRoom.sea[last_seat][len - 1] == throw_card) {
|
||||
playerRoom.sea[last_seat].splice(len - 1, 1);
|
||||
}
|
||||
}
|
||||
//再次判断连杠
|
||||
if (operate0 != 6 &&(playerRoom.config.peng_gang==1&&operate0!=1)&&operate0!=3) {//LOL加了个碰后不能暗杠 吃后不能暗杠
|
||||
mod_jxmj.judge_bar_an_gang(playerRoom, seat);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,589 @@
|
||||
//当用户的操作与其他用户操作冲突时的处理(比如1个用户碰,1个用户吃)
|
||||
//记录的用户操作,判断最终哪个操作是有效的
|
||||
|
||||
mod_jxmj.re_common_oparate = function (o_room, playerRoom, seat, operate, sea_seat, guo) {//guo,点击过的时候为1
|
||||
var arr = [];
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var turn = playerRoom.turn[1];
|
||||
for (var i = 0; i < 6; i++) {
|
||||
if (playerRoom.user_eat_bump[seat][i] > 0) {
|
||||
var arr = 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
var throw_card = playerRoom.throw_card;
|
||||
for (var k = 0; k < 2; k++) {
|
||||
if (ExObject.isArray(throw_card)) {
|
||||
throw_card = playerRoom.throw_card[k];
|
||||
}
|
||||
else {
|
||||
k = 1;
|
||||
}
|
||||
if (throw_card < 1) {
|
||||
continue;
|
||||
}
|
||||
if (playerRoom.user_eat_bump[seat][1]) {
|
||||
var l = playerRoom.guopeng[seat].length;
|
||||
playerRoom.guopeng[seat][l] = throw_card;
|
||||
}
|
||||
if (guo && playerRoom.user_eat_bump[seat][5]) {
|
||||
var l = playerRoom.guohu[seat].length;
|
||||
playerRoom.guohu[seat][l] = throw_card;
|
||||
var guohu_type = mod_jxmj.get_hu_obj(playerRoom, seat, throw_card);
|
||||
playerRoom.guohu_point[seat] = guohu_type.point;
|
||||
}
|
||||
}
|
||||
var hongzhong=playerRoom.user_eat_bump[seat][5];
|
||||
playerRoom.user_eat_bump[seat] = [0, 0, 0, 0, 0, 0, 0, 0];//杠碰吃、自摸杠暗杠、胡、听、抢杠胡
|
||||
//判断其他三家是否放弃胡牌
|
||||
var ban = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.user_eat_bump[i][5] > 0) {
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (guo) {
|
||||
//判断胡
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.operate_hu_note[i] > 0) {
|
||||
mod_jxmj.operate_hu_1(o_room, playerRoom, i);
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ban == 0) {
|
||||
//碰牌
|
||||
|
||||
var put_seat = playerRoom.last_operate[2];
|
||||
var peng_ord = [];//优先碰牌顺序
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + put_seat;
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
peng_ord[i] = j;
|
||||
}
|
||||
var peng_seat = -1;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.peng_record[peng_ord[i]][0] > -1) {
|
||||
peng_seat = peng_ord[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
//if(playerRoom.peng_record[0]>-1)
|
||||
if (peng_seat > -1) {
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];//吃清空
|
||||
var arr = ExArray.copyArray(playerRoom.peng_record[peng_seat][1]);
|
||||
var seat0 = playerRoom.peng_record[peng_seat][0];
|
||||
var operate0 = playerRoom.peng_record[peng_seat][3][0];
|
||||
var operate2 = playerRoom.peng_record[peng_seat][3][2];
|
||||
var throw_card0 = playerRoom.peng_record[peng_seat][2];
|
||||
var sea_seat=playerRoom.peng_record[peng_seat][4];//标记相关
|
||||
playerRoom.last_operate = [operate0, throw_card0, seat0];
|
||||
playerRoom.act_pai = [operate0, seat0, throw_card0, sea_seat, -1];//牌的动画[0 put,1peng,3chi,2gang,7-9hu ,本次操作的座位,上个操作的牌,上个操作的牌池,自摸杠的座位]
|
||||
playerRoom.peng_record = [[-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1]];
|
||||
playerRoom.chi_record = [-1, [-1], 0, -1];
|
||||
playerRoom.hu_note[2] = -2;//地胡
|
||||
if (operate0 == 1) {
|
||||
playerRoom.peng_chi_num[seat0][sea_seat] += 1;
|
||||
mod_jxmj.b.clear_tail_2pai(playerRoom, throw_card0);
|
||||
var last_seat = playerRoom.user_ctrl[1];
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
last_seat = -1;
|
||||
}
|
||||
mod_jxmj.seatohand(playerRoom, arr, operate0, seat0, throw_card0, last_seat);
|
||||
var l = playerRoom.hand_arrow[seat0].length;//标记相关
|
||||
playerRoom.hand_arrow[seat0][l] = [sea_seat, throw_card0];
|
||||
//mod_jxmj.judge_bar_an_gang(playerRoom, seat0);LOL
|
||||
playerRoom.tail_poker = [playerRoom.tail_poker[0], -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
playerRoom.hu_note[6] = [-1, -1, []];//杠炮清空
|
||||
}
|
||||
if (operate0 == 2) {
|
||||
//杠后允许摸牌
|
||||
playerRoom.peng_chi_num[seat0][sea_seat] += 1;
|
||||
if (playerRoom.hu_note[8] == 11) ;//地杠
|
||||
{
|
||||
playerRoom.hu_note[8] = sea_seat;
|
||||
}
|
||||
if (operate2 > 0) {
|
||||
//console.log("0peng_seat>-1=" + JSON.stringify(playerRoom.user_eat_bump));
|
||||
mod_jxmj.judge_do_2pai_gang(playerRoom, seat0, operate2 - 1);
|
||||
//console.log("1peng_seat>-1=" + JSON.stringify(playerRoom.user_eat_bump));
|
||||
}
|
||||
else {
|
||||
var last_seat = playerRoom.user_ctrl[1];
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
last_seat = -1;
|
||||
}
|
||||
mod_jxmj.seatohand(playerRoom, arr, operate0, seat0, throw_card0, last_seat);
|
||||
mod_jxmj.a.set_next_card_pos(playerRoom);//牌墙首牌+1
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
var first_card = playerRoom.poker[pos];
|
||||
playerRoom.user_ctrl[3] = first_card;
|
||||
mod_jxmj.judge_bar(playerRoom, seat0);
|
||||
mod_jxmj.liuJu(playerRoom, seat0);
|
||||
playerRoom.tail_poker = [playerRoom.tail_poker[0], -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
}
|
||||
var l = playerRoom.hand_arrow[seat0].length;
|
||||
playerRoom.hand_arrow[seat0][l] = [sea_seat, throw_card0];
|
||||
//console.log("2peng_seat>-1=" + JSON.stringify(playerRoom.user_eat_bump));
|
||||
//处理分数 已经处理1次
|
||||
|
||||
var jing = playerRoom.jing[1];
|
||||
var jing0 = playerRoom.jing[0];
|
||||
var djing0 = playerRoom.down_jing[0];
|
||||
var djing = playerRoom.down_jing[1];
|
||||
var beishu=1;
|
||||
var score=mod_jxmj.config.gang_score*1;
|
||||
if (mod_jxmj.config.jinxian){
|
||||
//庄家加分
|
||||
score=score*beishu;
|
||||
if (throw_card0==jing||throw_card0==jing0){
|
||||
score=32;
|
||||
}
|
||||
if(playerRoom.config.nanchang==1) {
|
||||
if (throw_card==jing||throw_card==djing||throw_card==djing0||throw_card==jing0){
|
||||
score=14;
|
||||
}
|
||||
}
|
||||
// if (throw_card0==djing0||throw_card0==jing0){
|
||||
// score=32;
|
||||
// }
|
||||
}
|
||||
if(score==14){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat]+=score
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat]+=score;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (score==32){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat0) {
|
||||
playerRoom.turn_point[turn][sea_seat] -= score;
|
||||
playerRoom.turn_point[turn][seat0]+=score
|
||||
playerRoom.gang_score[sea_seat] -= score;
|
||||
playerRoom.gang_score[seat0]+=score;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
// for (var i = 0; i < person; i++) {
|
||||
// if (i != seat0) {
|
||||
// if (i==playerRoom.identity[4]){
|
||||
// playerRoom.turn_point[turn][i] -= score*2;
|
||||
// playerRoom.turn_point[turn][seat0]+=score*2;
|
||||
// playerRoom.gang_score[i] -= score*2;
|
||||
// playerRoom.gang_score[seat0]+=score*2;
|
||||
// }else {
|
||||
// playerRoom.turn_point[turn][i] -= score;
|
||||
// playerRoom.turn_point[turn][seat0]+=score
|
||||
// playerRoom.gang_score[i] -= score;
|
||||
// playerRoom.gang_score[seat0]+=score;
|
||||
// if (seat0==playerRoom.identity[4]) {
|
||||
// playerRoom.turn_point[turn][i] -= score;
|
||||
// playerRoom.turn_point[turn][seat0]+=score;
|
||||
// playerRoom.gang_score[i] -= score;
|
||||
// playerRoom.gang_score[seat0]+=score;
|
||||
// }
|
||||
// }
|
||||
// if (i==sea_seat) {
|
||||
// playerRoom.turn_point[turn][i] -= score;
|
||||
// playerRoom.turn_point[turn][seat0]+=score
|
||||
// playerRoom.gang_score[i] -= score;
|
||||
// playerRoom.gang_score[seat0]+=score;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
if(playerRoom.config.nanchang==1){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat] += score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat] += score;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
var fan = [score, score, score, score];
|
||||
if (seat == playerRoom.identity[4]) {
|
||||
for (var j = 0; j < person; j++) {
|
||||
fan[j] *= 2;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
if (i == playerRoom.identity[4]) {
|
||||
fan[i] *= 2;
|
||||
}
|
||||
if (i == sea_seat) {
|
||||
fan[i] *= 2;
|
||||
}
|
||||
playerRoom.turn_point[turn][i] -= fan[i];
|
||||
playerRoom.turn_point[turn][seat0] += fan[i]
|
||||
playerRoom.gang_score[i] -= fan[i];
|
||||
playerRoom.gang_score[seat0] += fan[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//console.log("杠分:",playerRoom.gang_score)
|
||||
|
||||
var turn = playerRoom.turn[1];
|
||||
var base = playerRoom.roomtype[8] || 0;if(base==-1){base =0;}
|
||||
var base_score = mod_jxmj.config.base_score;
|
||||
base = base_score[base];
|
||||
playerRoom.turn_point[turn][seat0] += 0 * base;
|
||||
playerRoom.turn_point[turn][sea_seat] -= 0 * base
|
||||
|
||||
|
||||
var host = playerRoom.identity[4];
|
||||
if (seat0 == host && playerRoom.hu_note[8] == sea_seat)//地杠分数
|
||||
{
|
||||
playerRoom.turn_point[turn][seat0] += 0 * 2 * base;
|
||||
playerRoom.turn_point[turn][sea_seat] -= 0 * 2 * base;
|
||||
}
|
||||
playerRoom.hu_note_gang[seat0][0] = playerRoom.hu_note_gang[seat0][0] || [];
|
||||
var l = playerRoom.hu_note_gang[seat0][0].length;
|
||||
playerRoom.hu_note_gang[seat0][0][l] = [seat0, sea_seat];//明杠
|
||||
//playerRoom.hu_note_gang[sea_seat][3]+=1;//点杠
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat0) {
|
||||
playerRoom.hu_note_gang[i][3] += 1;
|
||||
}
|
||||
}
|
||||
playerRoom.statis[seat0][4] += 1;
|
||||
}
|
||||
else if (operate0 == 4 || operate0 == 5) {
|
||||
//console.log("5peng_seat>-1=" + JSON.stringify(playerRoom.user_eat_bump));
|
||||
var jing = playerRoom.jing[1];
|
||||
var jing0 = playerRoom.jing[0];
|
||||
var djing0 = playerRoom.down_jing[0];
|
||||
var djing = playerRoom.down_jing[1];
|
||||
var beishu=1;
|
||||
//处理分数 杠成功
|
||||
var turn = playerRoom.turn[1];
|
||||
var base = playerRoom.roomtype[8] || 0;if(base==-1){base =0;}
|
||||
var base_score = mod_jxmj.config.base_score;
|
||||
base = base_score[base];
|
||||
if (operate0 == 4) {
|
||||
var score=mod_jxmj.config.gang_score*2;
|
||||
if (mod_jxmj.config.jinxian){
|
||||
//庄家加分
|
||||
score=score*beishu;
|
||||
if (throw_card0==jing||throw_card0==jing0){
|
||||
score=32;
|
||||
}
|
||||
if(playerRoom.config.nanchang==1) {
|
||||
if (throw_card==jing||throw_card==djing||throw_card==djing0||throw_card==jing0){
|
||||
score=14;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(score==14){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat]+=score
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat]+=score;
|
||||
playerRoom.hu_note_gang[i][4] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (score==32){
|
||||
var un_peng_pos=-1;
|
||||
for (var i = 0; i < playerRoom.hand_arrow[seat0].length; i++) {
|
||||
if( playerRoom.hand_arrow[seat0][i][1]==gang_card && playerRoom.hand[seat0][i+1].length==4)
|
||||
{
|
||||
un_peng_pos= playerRoom.hand_arrow[seat0][i][0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat0) {
|
||||
playerRoom.turn_point[turn][un_peng_pos] -= score;
|
||||
playerRoom.turn_point[turn][seat0]+=score
|
||||
playerRoom.gang_score[un_peng_pos] -= score;
|
||||
playerRoom.gang_score[seat0]+=score;
|
||||
playerRoom.hu_note_gang[i][4] += 1;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
if(playerRoom.config.nanchang==1){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat] += score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat] += score;
|
||||
playerRoom.hu_note_gang[i][4] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat0) {
|
||||
if (i == playerRoom.identity[4]) {
|
||||
playerRoom.turn_point[turn][i] -= score * 2;
|
||||
playerRoom.turn_point[turn][seat0] += score * 2;
|
||||
playerRoom.gang_score[i] -= score * 2;
|
||||
playerRoom.gang_score[seat0] += score * 2;
|
||||
} else {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat0] += score
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat0] += score;
|
||||
}
|
||||
// if (gang_card == jing||gang_card == jing0||gang_card == djing0||gang_card == djing) {
|
||||
// playerRoom.hu_note_gang_jing[seat][2] += 1;
|
||||
// }
|
||||
// else {
|
||||
playerRoom.hu_note_gang[i][4] += 1;
|
||||
// }//被加杠//明杠、自摸杠、暗杠、点杠、被加杠、被暗杠
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//console.log("杠分:",playerRoom.gang_score)
|
||||
// playerRoom.turn_point[turn][seat0] += 0 * base;
|
||||
// for (var i = 0; i < person; i++) {
|
||||
// if (i != seat0) {
|
||||
// playerRoom.turn_point[turn][i] -= 0 * base;
|
||||
// playerRoom.hu_note_gang[i][4] += 1;//被加杠//明杠、自摸杠、暗杠、点杠、被加杠、被暗杠
|
||||
// }
|
||||
// }
|
||||
playerRoom.hu_note_gang[seat0][1] += 1;//自摸杠
|
||||
playerRoom.statis[seat0][5] += 1;
|
||||
}
|
||||
else if (operate0 == 5) {
|
||||
var score=mod_jxmj.config.gang_score*2;
|
||||
if (mod_jxmj.config.jinxian){
|
||||
//庄家加分
|
||||
score=score*beishu;
|
||||
if (throw_card0==jing||throw_card0==jing0){
|
||||
score=32;
|
||||
}
|
||||
if(playerRoom.config.nanchang==1) {
|
||||
if (throw_card==jing||throw_card==djing||throw_card==djing0||throw_card==jing0){
|
||||
score=14;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (score==14){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat]+=score
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat]+=score;
|
||||
playerRoom.hu_note_gang[i][5] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (score==32){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat0) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat0]+=score
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat0]+=score;
|
||||
playerRoom.hu_note_gang[i][5] += 1;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
if(playerRoom.config.nanchang==1){
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat] += score;
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat] += score;
|
||||
playerRoom.hu_note_gang[i][5] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat0) {
|
||||
if (i == playerRoom.identity[4]) {
|
||||
playerRoom.turn_point[turn][i] -= score * 2;
|
||||
playerRoom.turn_point[turn][seat0] += score * 2;
|
||||
playerRoom.gang_score[i] -= score * 2;
|
||||
playerRoom.gang_score[seat0] += score * 2;
|
||||
} else {
|
||||
playerRoom.turn_point[turn][i] -= score;
|
||||
playerRoom.turn_point[turn][seat0] += score
|
||||
playerRoom.gang_score[i] -= score;
|
||||
playerRoom.gang_score[seat0] += score;
|
||||
}
|
||||
// if (gang_card == jing||gang_card == jing0||gang_card == djing0||gang_card == djing) {
|
||||
// playerRoom.hu_note_gang_jing[seat][2] += 1;
|
||||
// }
|
||||
// else {
|
||||
playerRoom.hu_note_gang[i][5] += 1;
|
||||
// }//被加杠//明杠、自摸杠、暗杠、点杠、被加杠、被暗杠
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//console.log("杠分:",playerRoom.gang_score)
|
||||
playerRoom.statis[seat0][5] += 1;
|
||||
// playerRoom.turn_point[turn][seat0]+=6*base;
|
||||
// playerRoom.an_gang_num[seat0]+=1;
|
||||
// for(var i=0;i<4;i++)
|
||||
// {
|
||||
// if(i!=seat0)
|
||||
// {playerRoom.turn_point[turn][i]-=2*base;
|
||||
// playerRoom.hu_note_gang[i][5]+=1;//被暗杠
|
||||
// }
|
||||
// }
|
||||
}
|
||||
if (playerRoom.record_ctrl_pos[0] > -1) {
|
||||
seat0 = playerRoom.record_ctrl_pos[0];
|
||||
throw_card = playerRoom.record_ctrl_pos[1];
|
||||
}
|
||||
//if (operate2 > 0) {
|
||||
// if (playerRoom.tail_poker[7] == 1 && playerRoom.tail_poker[8] != seat) {
|
||||
mod_jxmj.result_gang45(o_room, playerRoom, seat0, operate0, throw_card0, operate2);
|
||||
playerRoom.guopai = [0, 0, 0, 0];
|
||||
arr = 3;
|
||||
// }
|
||||
// }
|
||||
//杠后允许摸牌
|
||||
if (playerRoom.tail_poker[7] != 1) {
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
playerRoom.poker[pos] = -1;//自摸杠牌后:牌墙手牌清空
|
||||
// playerRoom.user_ctrl[8]+=1;//牌墙首牌
|
||||
// {playerRoom.user_ctrl[8]=0;}
|
||||
mod_jxmj.a.set_next_card_pos(playerRoom, operate);//牌墙首牌+1
|
||||
var next_pos = playerRoom.user_ctrl[8];
|
||||
var next_card = playerRoom.poker[next_pos];
|
||||
playerRoom.user_ctrl[3] = next_card;
|
||||
}
|
||||
if (operate2 > 0) {
|
||||
//console.log("3peng_seat>-1=" + JSON.stringify(playerRoom.user_eat_bump));
|
||||
mod_jxmj.judge_do_2pai_gang(playerRoom, seat0, operate2 - 1);
|
||||
//console.log("4peng_seat>-1=" + JSON.stringify(playerRoom.user_eat_bump));
|
||||
}
|
||||
else {
|
||||
mod_jxmj.judge_bar(playerRoom, seat0);
|
||||
mod_jxmj.liuJu(playerRoom, seat0);
|
||||
playerRoom.tail_poker = [playerRoom.tail_poker[0], -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
}
|
||||
}
|
||||
if (operate0 == 2 || operate0 == 4 || operate0 == 5) {
|
||||
playerRoom.hu_note[6] = [seat0, 10, []];//杠炮准备
|
||||
if (seat0 == playerRoom.lastbar[0]) {
|
||||
playerRoom.lastbar[2] += 1;
|
||||
}
|
||||
else {
|
||||
playerRoom.lastbar[2] = 1;
|
||||
}
|
||||
var bar_n = playerRoom.lastbar[2];
|
||||
if (operate0 == 2) {
|
||||
playerRoom.lastbar = [seat0, 0, bar_n];
|
||||
}//谁杠,什么杠:0普通1自摸2暗杠
|
||||
else if (operate0 == 4) {
|
||||
playerRoom.lastbar = [seat0, 1, bar_n];
|
||||
}//1自摸杠
|
||||
else if (operate0 == 5) {
|
||||
playerRoom.lastbar = [seat0, 2, bar_n];
|
||||
}//1自摸杠
|
||||
//arr=3;
|
||||
}
|
||||
playerRoom.record_ctrl_pos = [seat0, throw_card];
|
||||
}
|
||||
else if (playerRoom.chi_record[0] > -1) {
|
||||
//判断其他三家是否放弃碰牌
|
||||
var ban = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.guopai[i] == 1) {
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ban == 0) {
|
||||
playerRoom.hu_note[2] = -2;//地胡
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];//吃清空
|
||||
var arr = ExArray.copyArray(playerRoom.chi_record[1]);
|
||||
var seat0 = playerRoom.chi_record[0];
|
||||
var throw_card0 = playerRoom.chi_record[2];
|
||||
mod_jxmj.b.clear_tail_2pai(playerRoom, throw_card0);
|
||||
var last_seat = playerRoom.user_ctrl[1];
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
last_seat = -1;
|
||||
}
|
||||
mod_jxmj.seatohand(playerRoom, arr, 3, seat0, throw_card0, last_seat);
|
||||
playerRoom.last_operate = [3, throw_card0, seat0];
|
||||
playerRoom.peng_record = [[-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1]];
|
||||
playerRoom.chi_record = [-1, [-1], 0, -1];
|
||||
var near_seat = seat0 - 1;//上家用户
|
||||
if (near_seat < 0) {
|
||||
near_seat = person - 1;
|
||||
}
|
||||
playerRoom.peng_chi_num[seat0][near_seat] += 1;
|
||||
var l = playerRoom.hand_arrow[seat0].length;
|
||||
playerRoom.hand_arrow[seat0][l] = [near_seat, throw_card0];
|
||||
playerRoom.act_pai = [3, seat0, throw_card0, near_seat, -1];//牌的动画[1 put,2peng,3chi,4gang,5hu ,本次操作的座位,上个操作的牌,上个操作的牌池,自摸杠的座位]
|
||||
playerRoom.sound = 100 + 1;
|
||||
playerRoom.hu_note[6] = [-1, -1, []];//杠炮清空
|
||||
mod_jxmj.judge_bar_an_gang(playerRoom, seat0);
|
||||
playerRoom.record_ctrl_pos = [seat0, throw_card];
|
||||
playerRoom.tail_poker = [playerRoom.tail_poker[0], -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
}
|
||||
}
|
||||
else if (guo) {
|
||||
var last_seat = playerRoom.last_operate[2];
|
||||
var next_seat = last_seat + 1;
|
||||
if (next_seat > person - 1) {
|
||||
next_seat = 0;
|
||||
}
|
||||
if (hongzhong==4){
|
||||
}
|
||||
else if (seat == playerRoom.user_ctrl[2])//自己过自己
|
||||
{
|
||||
next_seat = seat;
|
||||
}
|
||||
else {
|
||||
var ready_record = 0;
|
||||
for (var j = 0; j < 4; j++) {
|
||||
for (var i = 0; i < 7; i++) {
|
||||
if (j != seat) {
|
||||
if (playerRoom.user_eat_bump[j][i] > 0) {
|
||||
ready_record = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ready_record == 0) {
|
||||
var ban = mod_jxmj.liuJu(playerRoom, next_seat);
|
||||
if (ban == 0) {
|
||||
playerRoom.user_ctrl[10] += 1;//控制权是否有变动
|
||||
mod_jxmj.set_time(playerRoom);
|
||||
var last_seat = playerRoom.last_operate[2];
|
||||
var next_seat = last_seat + 1;
|
||||
if (next_seat > person - 1) {
|
||||
next_seat = 0;
|
||||
}
|
||||
mod_jxmj.judge_bar(playerRoom, next_seat);
|
||||
playerRoom.tail_poker = [playerRoom.tail_poker[0], -1, -1, -1, -1, -1, -1, -1, -1];
|
||||
}
|
||||
}
|
||||
}
|
||||
arr = 2;
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
@@ -0,0 +1,681 @@
|
||||
//处理胡牌操作
|
||||
mod_jxmj.operate_hu = function (o_room, playerRoom, seat, operate) {
|
||||
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var throw_card = playerRoom.throw_card;
|
||||
//var last_seat=playerRoom.user_ctrl[1];//上个控制权用户
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
var first_card = playerRoom.poker[pos];
|
||||
// if(operate[2]>0 && playerRoom.tail_poker[7]>-1)
|
||||
// {
|
||||
// if(playerRoom.tail_poker[3]==operate[1])
|
||||
// {first_card=playerRoom.tail_poker[3];}
|
||||
// else if(playerRoom.tail_poker[4]==operate[1])
|
||||
// {first_card=playerRoom.tail_poker[4];}
|
||||
// }
|
||||
var sea_seat = playerRoom.last_operate[2];
|
||||
if (operate[0] == 7)//胡
|
||||
{
|
||||
playerRoom.act = [7, seat, 1, [0]];//动作,座位,计时,相关手牌
|
||||
//是否一炮多响
|
||||
//check 胡
|
||||
//结算 clearing
|
||||
var hu_card_num = 0, hu4 = 0;
|
||||
if (playerRoom.config.pai_num == 112) {
|
||||
//自己红肿胡
|
||||
if (playerRoom.user_eat_bump[seat][5] == 4) {
|
||||
mod_jxmj.operate_hu_2(o_room, playerRoom, seat, first_card);
|
||||
}
|
||||
//别人红肿胡
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat && playerRoom.user_eat_bump[i][5] == 4) {
|
||||
hu4 = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hu4 == 0 && operate[1] == 0 && playerRoom.user_eat_bump[seat][5] > 0 && playerRoom.user_ctrl[2] == seat)//自摸胡(杠上开花)
|
||||
{
|
||||
//别人未红肿胡,自摸,可胡,控制权是自己的
|
||||
var first_card = playerRoom.user_ctrl[3];
|
||||
if (playerRoom.tail_poker[7] == 0) {
|
||||
first_card = playerRoom.tail_poker[3];
|
||||
}
|
||||
else if (playerRoom.tail_poker[7] == 1 && playerRoom.tail_poker_hu[2][seat] == seat) {
|
||||
first_card = playerRoom.tail_poker[3];
|
||||
if (first_card != -1) {
|
||||
var throw_card1 = playerRoom.tail_poker[4];
|
||||
if (throw_card1 > 0 && playerRoom.tail_poker_hu[4][seat] != seat) {
|
||||
playerRoom.sea[seat] = playerRoom.sea[seat].concat(throw_card1);
|
||||
}
|
||||
}
|
||||
}
|
||||
var turn_point = [0, 0, 0, 0];
|
||||
//是否海底牌
|
||||
var pai_num = 0;
|
||||
for (var j = 0; j < playerRoom.poker.length; j++) {
|
||||
if (playerRoom.poker[j] > 0) {
|
||||
pai_num += 1;
|
||||
}
|
||||
}
|
||||
|
||||
var type = {"hu_type": [], "point": 0};
|
||||
if (first_card > 0) {
|
||||
playerRoom.last_operate = [operate[0], first_card, seat];
|
||||
//杠上开花
|
||||
if (playerRoom.lastbar[0] == seat && playerRoom.lastbar[1] == 1) {
|
||||
// playerRoom.act[0] = 10;
|
||||
}
|
||||
playerRoom.hu_card[seat] = [first_card, 0];
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];//是否可杠碰吃、自摸杠、暗杠、5胡(1吃胡2自摸胡3抢杠胡)、6听
|
||||
playerRoom.hu_note[0] = 0;//记录自摸胡
|
||||
playerRoom.statis[seat][0] += 1;
|
||||
var hu_arr = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
hu_arr[0] = hu_arr[0].concat(first_card);
|
||||
var type = mod_jxmj.get_hu_obj(playerRoom, seat, first_card);
|
||||
// var host=playerRoom.identity[4];
|
||||
// if(seat==host)
|
||||
// {var l=type.hu_type.length;
|
||||
// var base=playerRoom.roomtype[8] || 0;
|
||||
// var base_score=mod_jxmj.config.base_score;
|
||||
// base=base_score[base];
|
||||
// for(var i=0;i<l;i++)
|
||||
// {
|
||||
// if(l>1 && type.hu_type[i]>1 || l==1 && type.hu_type[i]==1)
|
||||
// {type.point=type.point+1*base;
|
||||
// }
|
||||
// }
|
||||
// }//长沙庄+1
|
||||
playerRoom.final_hu = [seat, [first_card, 0], type];//最终胡:座位、胡的牌、胡的类型
|
||||
// if(playerRoom.lastbar[0]!=seat)//上个杠不是自己
|
||||
// {
|
||||
// if(pai_num<1)
|
||||
// {playerRoom.hu_note[5][seat]=seat;}//记录海底胡
|
||||
|
||||
// }
|
||||
if (playerRoom.yaopai[0] == seat) {
|
||||
playerRoom.hu_note[5][seat] = seat;
|
||||
}//记录海底胡
|
||||
hu_card_num = 1;
|
||||
}
|
||||
if (playerRoom.tail_poker[7] == 1 && playerRoom.tail_poker_hu[4][seat] == seat) {
|
||||
var first_card1 = playerRoom.tail_poker[4];
|
||||
if (first_card1 > 0) {
|
||||
var throw_card1 = playerRoom.tail_poker[3];
|
||||
if (throw_card1 > 0 && playerRoom.tail_poker_hu[2][seat] != seat) {
|
||||
playerRoom.sea[seat] = playerRoom.sea[seat].concat(throw_card1);
|
||||
}
|
||||
playerRoom.last_operate = [operate[0], first_card, seat];
|
||||
if (playerRoom.lastbar[0] == seat && playerRoom.lastbar[1] == 1) {
|
||||
// playerRoom.act[0] = 10;
|
||||
}
|
||||
if (hu_card_num == 1) {
|
||||
playerRoom.hu_card1[seat] = [first_card, 0];
|
||||
}
|
||||
else {
|
||||
playerRoom.hu_card[seat] = [first_card, 0];
|
||||
}
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];//是否可杠碰吃、自摸杠、暗杠、5胡(1吃胡2自摸胡3抢杠胡)、6听
|
||||
playerRoom.hu_note[0] = 0;//记录自摸胡
|
||||
var hu_arr = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
hu_arr[0] = hu_arr[0].concat(first_card1);
|
||||
var type1 = mod_jxmj.get_hu_obj(playerRoom, seat, first_card1);
|
||||
//console.log("处理分数00===" + JSON.stringify(type1));
|
||||
type.hu_type = type.hu_type.concat(type1.hu_type);
|
||||
type.point = type.point + type1.point;
|
||||
playerRoom.final_hu = [seat, [first_card, first_card1], type];//最终胡:座位、胡的牌、胡的类型
|
||||
// if(playerRoom.lastbar[0]!=seat)//上个杠不是自己
|
||||
// {
|
||||
// if(pai_num<1)
|
||||
// {playerRoom.hu_note[5][seat]=seat;}//记录海底胡
|
||||
// }
|
||||
if (playerRoom.yaopai[0] == seat) {
|
||||
playerRoom.hu_note[5][seat] = seat;
|
||||
}//记录海底胡
|
||||
}
|
||||
}
|
||||
var seats = [seat];
|
||||
if (mod_jxmj.config.horse == 1) {
|
||||
mod_jxmj.b.checkMapai(playerRoom, seats);
|
||||
}
|
||||
else if (mod_jxmj.config.horse == 2) {
|
||||
mod_jxmj.b.checkHorse(playerRoom, seats);
|
||||
}
|
||||
var turn_point = ExArray.copyArray(mod_jxmj.do_hu_point(playerRoom, type, seat));//处理分数
|
||||
//console.log("处理分数11===" + JSON.stringify(turn_point));
|
||||
|
||||
//mod_jxmj.b.checkBird(playerRoom,seats);
|
||||
//mod_jxmj.do_bird_point(playerRoom,turn_point);
|
||||
mod_jxmj.do_bird_start_point(playerRoom, turn_point);
|
||||
playerRoom.hu_card = [[0, 0], [0, 0], [0, 0], [0, 0]];//胡的牌、胡的牌的原来位置
|
||||
}
|
||||
else if (hu4 == 0 && operate[1] == 1 && playerRoom.user_eat_bump[seat][5] > 0 && playerRoom.user_ctrl[2] != seat)//碰吃胡
|
||||
{
|
||||
var throw_card0 = throw_card;
|
||||
if (throw_card0 > 0 && !ExObject.isArray(throw_card)) {
|
||||
if(mod_jxmj.config.many_hu == 1) {
|
||||
playerRoom.act = [8, seat, 1, [throw_card0], sea_seat];//动作,座位,计时,相关手牌
|
||||
}
|
||||
for (var j = 0; j < 4; j++) {
|
||||
if(mod_jxmj.config.jinxian == 1 && mod_jxmj.config.nanchang == 0) {
|
||||
// for (var i = 0; i < 5; i++)
|
||||
for (var i = 1; i < 5; i++)//胡后可以点杠
|
||||
{
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
for (var i = 0; i < 5; i++)
|
||||
{
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(mod_jxmj.config.jinxian == 1 && mod_jxmj.config.nanchang == 0) {
|
||||
for (var j = seat + 1; ; j++) { //清空下家操作
|
||||
if (j == person) {
|
||||
j = 0;
|
||||
}
|
||||
if (j == playerRoom.last_operate[2]) {
|
||||
break;
|
||||
}
|
||||
for (var i = 0; i < 7; i++) {
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
//TODO 胡牌优先级
|
||||
//DIY
|
||||
// if (playerRoom.last_operate[0]==0||playerRoom.last_operate[0]==4 && mod_jxmj.config.whohu==1){
|
||||
if ((playerRoom.last_operate[0]==0 && mod_jxmj.config.jinxian == 1 && mod_jxmj.config.nanchang == 0) || mod_jxmj.config.nanchang == 1&&(playerRoom.last_operate[0]==0||playerRoom.last_operate[0]==4 && mod_jxmj.config.whohu==1)){
|
||||
var hu_ord = [];//优先胡牌顺序
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + playerRoom.last_operate[2];
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
hu_ord[i] = j;
|
||||
}
|
||||
// //LOL拦胡
|
||||
// if (playerRoom.hu_order[0]>-1){
|
||||
// hu_ord=playerRoom.hu_order;
|
||||
// }//LOL
|
||||
if ((seat==hu_ord[1]&&playerRoom.last_operate[0]==0&&mod_jxmj.config.jinxian == 1&&mod_jxmj.config.nanchang == 0)||(mod_jxmj.config.nanchang == 1&&seat==hu_ord[1]&&(playerRoom.last_operate[0]==0||playerRoom.last_operate[0]==4))){
|
||||
//LOL只有高阶的胡显示动画
|
||||
playerRoom.whohu[seat]=1;
|
||||
playerRoom.user_eat_bump= [[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
}else {
|
||||
playerRoom.whohu[seat]=1;
|
||||
playerRoom.act[0] = -1;
|
||||
playerRoom.user_eat_bump[seat]=[0, 0, 0, 0, 0, 0, 0, 0];
|
||||
}
|
||||
//LOL判断多人胡,胡的动画显示
|
||||
if (operate[0]==6||operate[0]==7){
|
||||
var hu_ord = [];//优先胡牌顺序
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + playerRoom.last_operate[2];
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
hu_ord[i] = j;
|
||||
}
|
||||
var ban=1;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
for (var j= 0; j <playerRoom.user_eat_bump[i].length; j++) {
|
||||
if (playerRoom.user_eat_bump[i][j] > 0){
|
||||
ban=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ban==1){
|
||||
for (var i = 0; i < hu_ord.length; i++) {
|
||||
if (playerRoom.whohu[hu_ord[i]]==1){
|
||||
playerRoom.act[0] = 8;
|
||||
playerRoom.act[1] = hu_ord[i];
|
||||
break;
|
||||
// playerRoom.act[2] = 1;
|
||||
// playerRoom.act[3] = [playerRoom.throw_card];
|
||||
// playerRoom.act[4] = playerRoom.last_operate[2];;
|
||||
// playerRoom.act = [8, seat, 1, [throw_card0], sea_seat];//动作,座位,计时,相关手牌
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//DIY
|
||||
playerRoom.user_eat_bump[seat] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
playerRoom.hu_card[seat] = [throw_card0, 1];//胡的牌、胡的牌的原来位置1(在上次操作的牌池中)
|
||||
playerRoom.operate_hu_note[seat] = operate[1];
|
||||
|
||||
}
|
||||
if (throw_card && ExObject.isArray(throw_card) && playerRoom.tail_poker_hu[1] > 0 && playerRoom.tail_poker_hu[2][seat] == seat) {
|
||||
throw_card0 = throw_card[0];
|
||||
playerRoom.act = [8, seat, 1, [throw_card0], sea_seat];//动作,座位,计时,相关手牌
|
||||
for (var j = 0; j < 4; j++) {
|
||||
if (mod_jxmj.config.jinxian == 1 && mod_jxmj.config.nanchang==0) {
|
||||
// for (var i = 0; i < 5; i++)
|
||||
for (var i = 1; i < 5; i++)//胡后可以点杠
|
||||
{
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
for (var i = 0; i < 5; i++)
|
||||
//for (var i = 1; i < 5; i++)//胡后可以点杠
|
||||
{
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
playerRoom.user_eat_bump[seat] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
playerRoom.hu_card[seat] = [throw_card0, 1];//胡的牌、胡的牌的原来位置1(在上次操作的牌池中)
|
||||
playerRoom.operate_hu_note[seat] = operate[1];
|
||||
}
|
||||
if (throw_card && ExObject.isArray(throw_card) && playerRoom.tail_poker_hu[3] > 0 && playerRoom.tail_poker_hu[4][seat] == seat) {
|
||||
throw_card0 = throw_card[1];
|
||||
playerRoom.act = [8, seat, 1, [throw_card0], sea_seat];//动作,座位,计时,相关手牌
|
||||
for (var j = 0; j < 4; j++) {
|
||||
if (mod_jxmj.config.jinxian == 1 && mod_jxmj.config.nanchang==0) {
|
||||
// for (var i = 0; i < 5; i++)
|
||||
for (var i = 1; i < 5; i++)//胡后可以点杠
|
||||
{
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
else{
|
||||
for (var i = 0; i < 5; i++)
|
||||
//for (var i = 1; i < 5; i++)//胡后可以点杠
|
||||
{
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
playerRoom.user_eat_bump[seat] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
if (hu_card_num == 1) {
|
||||
playerRoom.hu_card1[seat] = [throw_card0, 1];
|
||||
}//胡的牌、胡的牌的原来位置1(在上次操作的牌池中)
|
||||
else {
|
||||
playerRoom.hu_card[seat] = [throw_card0, 1];
|
||||
}
|
||||
playerRoom.operate_hu_note[seat] = operate[1];
|
||||
}
|
||||
}
|
||||
else if (hu4 == 0 && operate[1] == 2 && playerRoom.user_eat_bump[seat][5] > 0 && playerRoom.last_operate[2] > -1 && playerRoom.last_operate[0] == 4 && playerRoom.user_ctrl[2] != seat)//抢杠胡
|
||||
{
|
||||
var gang_card = playerRoom.last_operate[1];
|
||||
if(mod_jxmj.config.many_hu == 1) {
|
||||
playerRoom.act = [9, seat, 1, [gang_card], sea_seat];//动作,座位,计时,相关手牌
|
||||
}
|
||||
for (var j = 0; j < 4; j++) {
|
||||
for (var i = 0; i < 5; i++)
|
||||
//for(var i=1;i<5;i++)//胡后可以点杠
|
||||
{
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
//TODO 胡牌优先级
|
||||
//DIY
|
||||
if (playerRoom.last_operate[0]==0||playerRoom.last_operate[0]==4 && mod_jxmj.config.whohu==1){
|
||||
var hu_ord = [];//优先胡牌顺序
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + playerRoom.last_operate[2];
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
hu_ord[i] = j;
|
||||
}
|
||||
// //LOL拦胡
|
||||
// if (playerRoom.hu_order[0]>-1){
|
||||
// hu_ord=playerRoom.hu_order;
|
||||
// }//LOL
|
||||
if (seat==hu_ord[1]&&(playerRoom.last_operate[0]==0||playerRoom.last_operate[0]==4)){
|
||||
//LOL只有高阶的胡显示动画
|
||||
playerRoom.whohu[seat]=1;
|
||||
playerRoom.user_eat_bump= [[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
}else {
|
||||
playerRoom.whohu[seat]=1;
|
||||
playerRoom.act[0] = -1;
|
||||
playerRoom.user_eat_bump[seat]=[0, 0, 0, 0, 0, 0, 0, 0];
|
||||
}
|
||||
//LOL判断多人胡,胡的动画显示
|
||||
if (operate[0]==6||operate[0]==7){
|
||||
var hu_ord = [];//优先胡牌顺序
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + playerRoom.last_operate[2];
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
hu_ord[i] = j;
|
||||
}
|
||||
var ban=1;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
for (var j= 0; j <playerRoom.user_eat_bump[i].length; j++) {
|
||||
if (playerRoom.user_eat_bump[i][j] > 0){
|
||||
ban=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ban==1){
|
||||
for (var i = 0; i < hu_ord.length; i++) {
|
||||
if (playerRoom.whohu[hu_ord[i]]==1){
|
||||
playerRoom.act[0] = 9;
|
||||
playerRoom.act[1] = hu_ord[i];
|
||||
//console.log(playerRoom.act)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//LOL判断多人胡,胡的动画显示
|
||||
}
|
||||
//DIY
|
||||
playerRoom.user_eat_bump[seat] = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
playerRoom.hu_card[seat] = [gang_card, 2];//胡的牌、胡的牌的原来位置2(在上次操作的副露中)
|
||||
playerRoom.operate_hu_note[seat] = operate[1];
|
||||
}
|
||||
// if (operate[1] > 0)//點泡壺
|
||||
// {
|
||||
// mod_jxmj.operate_hu_1(o_room, playerRoom, seat);
|
||||
// }
|
||||
if (mod_jxmj.config.nanchang == 1) {
|
||||
if (operate[1] > 0)//點泡壺
|
||||
{
|
||||
mod_jxmj.operate_hu_1(o_room, playerRoom, seat);
|
||||
}
|
||||
playerRoom.user_ctrl[3] = -1;
|
||||
playerRoom.hu_ready = 1;
|
||||
}
|
||||
if (mod_jxmj.config.jinxian == 1&&mod_jxmj.config.nanchang==0) {
|
||||
var ban_1 = 0;
|
||||
for (var j = seat + 1; ; j++) {
|
||||
if (j == person) {
|
||||
j = 0;
|
||||
}
|
||||
if (j == playerRoom.last_operate[2]) {
|
||||
break;
|
||||
}
|
||||
for (var i = 0; i < 7; i++) {
|
||||
playerRoom.user_eat_bump[j][i] = 0;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.user_eat_bump[i][0] > 0) {
|
||||
ban_1 = 1;
|
||||
}
|
||||
|
||||
}
|
||||
if (ban_1 == 0) {
|
||||
if (operate[1] > 0)//點泡壺
|
||||
{
|
||||
mod_jxmj.operate_hu_1(o_room, playerRoom, seat);
|
||||
}
|
||||
playerRoom.user_ctrl[3] = -1;
|
||||
}
|
||||
}
|
||||
// playerRoom.user_ctrl[3] = -1;
|
||||
// playerRoom.hu_ready = 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//处理红中胡操作
|
||||
mod_jxmj.operate_hu_2 = function (o_room, playerRoom, seat, first_card) {
|
||||
if (playerRoom.user_eat_bump[seat][5] == 4)//4红中胡
|
||||
{
|
||||
playerRoom.hu_note[0] = 0;
|
||||
playerRoom.hu_card[seat] = [41, 0];
|
||||
var type = mod_jxmj.get_hu_obj(playerRoom, seat, first_card, 0, 1);
|
||||
playerRoom.final_hu = [seat, [first_card, 0], type];//最终胡:座位、胡的牌、胡的类型
|
||||
var seats = [seat];
|
||||
if (mod_jxmj.config.horse == 1) {
|
||||
mod_jxmj.b.checkMapai(playerRoom, seats);
|
||||
}
|
||||
else if (mod_jxmj.config.horse == 2) {
|
||||
mod_jxmj.b.checkHorse(playerRoom, seats);
|
||||
}
|
||||
var turn_point = ExArray.copyArray(mod_jxmj.do_hu_point(playerRoom, type, seat));//处理分数
|
||||
|
||||
//mod_jxmj.b.checkBird(playerRoom,seats);
|
||||
//mod_jxmj.do_bird_point(playerRoom,turn_point);
|
||||
mod_jxmj.do_bird_start_point(playerRoom, turn_point);
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
}
|
||||
}
|
||||
//处理多个用户同时胡牌操作
|
||||
mod_jxmj.operate_hu_1 = function (o_room, playerRoom, seat) {
|
||||
var throw_card = playerRoom.throw_card;
|
||||
var sea_seat = playerRoom.last_operate[2];
|
||||
var ban = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (mod_jxmj.config.jinxian == 1 && mod_jxmj.config.nanchang==0) {
|
||||
// if (i != seat && playerRoom.user_eat_bump[i][5] > 0)
|
||||
if (i != seat && playerRoom.user_eat_bump[i][5] > 0 || playerRoom.user_eat_bump[i][0] > 0)//胡后杠
|
||||
{
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (i != seat && playerRoom.user_eat_bump[i][5] > 0)
|
||||
//if (i != seat && playerRoom.user_eat_bump[i][5] > 0 || playerRoom.user_eat_bump[i][0] > 0)//胡后杠
|
||||
{
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断谁最终胡
|
||||
if (ban == 0) {
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
//playerRoom.hu_note[0]=1+sea_seat;//记录点炮胡
|
||||
var dianpao = playerRoom.last_operate[2];
|
||||
var hu_ord = [];//优先胡牌顺序
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + dianpao;
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
hu_ord[i] = j;
|
||||
}
|
||||
var hu_person_num = 0;
|
||||
var turn_point = [0, 0, 0, 0];
|
||||
var seats = [];
|
||||
|
||||
var hu_card_num = 0;
|
||||
//是否海底牌
|
||||
var pai_num = 0;
|
||||
for (var j = 0; j < playerRoom.poker.length; j++) {
|
||||
if (playerRoom.poker[j] > 0) {
|
||||
pai_num += 1;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var seat = hu_ord[i];
|
||||
var hu_card_type = playerRoom.hu_card[seat][0];
|
||||
if (hu_card_type > 0) {
|
||||
seats[seats.length] = seat;
|
||||
if (mod_jxmj.config.many_hu == 0) {
|
||||
break;
|
||||
}//是否截胡
|
||||
}
|
||||
}
|
||||
if (mod_jxmj.config.horse == 1) {
|
||||
mod_jxmj.b.checkMapai(playerRoom, seats);
|
||||
}
|
||||
else if (mod_jxmj.config.horse == 2) {
|
||||
mod_jxmj.b.checkHorse(playerRoom, seats);
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var seat = hu_ord[i];
|
||||
var hu_card_type = playerRoom.hu_card[seat][0];
|
||||
if (hu_card_type > 0) {
|
||||
var hu_big_type = playerRoom.hu_card[seat][1];
|
||||
//console.log("hu_card_type=" + hu_big_type);
|
||||
seats[seats.length] = seat;
|
||||
//处理牌的位置
|
||||
var last_operate_seat = playerRoom.last_operate[2];//上次出牌到哪个牌池
|
||||
if (hu_big_type == 1)//碰吃胡
|
||||
{
|
||||
if (hu_person_num == 0) {
|
||||
playerRoom.sea[last_operate_seat].splice(playerRoom.sea[last_operate_seat].length-1, 1);
|
||||
if(mod_jxmj.config.many_hu == 0) {
|
||||
playerRoom.act = [8, seat, 1, [throw_card], last_operate_seat];//动作,座位,计时,相关手牌
|
||||
}
|
||||
playerRoom.act_pai = [8, seat, throw_card, last_operate_seat, -1];//牌的动画[1 put,2peng,3chi,4gang,5hu ,本次操作的座位,上个操作的牌,上个操作的牌池,自摸杠的座位]
|
||||
}
|
||||
playerRoom.hu_note[0] = 1 + last_operate_seat;//记录点炮胡
|
||||
playerRoom.statis[seat][1] += 1;
|
||||
playerRoom.statis[last_operate_seat][2] += 1;
|
||||
if (playerRoom.hu_note[6][0] != seat && playerRoom.hu_note[6][1] > -1)//前个杠不是胡家
|
||||
{
|
||||
playerRoom.hu_note[6][1] = seat;//杠炮成功
|
||||
var l = playerRoom.hu_note[6][2].length;
|
||||
playerRoom.hu_note[6][2][l] = seat;//杠炮成功
|
||||
}
|
||||
}
|
||||
else if (hu_big_type == 2)//抢杠胡
|
||||
{
|
||||
if (hu_person_num == 0) {
|
||||
var l = playerRoom.hand[last_operate_seat].length;
|
||||
for (var j = 1; j < l; j++) {
|
||||
var l1 = playerRoom.hand[last_operate_seat][j].length;//有杠牌
|
||||
if (l1 == 4 && playerRoom.hand[last_operate_seat][j][0] == hu_card_type) {//有杠牌且杠牌为胡牌的类型牌
|
||||
//被抢杠了,变成三个
|
||||
playerRoom.hand[last_operate_seat][j] = [hu_card_type, hu_card_type, hu_card_type];
|
||||
break;
|
||||
}
|
||||
}
|
||||
var gang_card = playerRoom.last_operate[1];
|
||||
if(mod_jxmj.config.many_hu == 0) {
|
||||
playerRoom.act = [9, seat, 1, [gang_card], last_operate_seat];//动作,座位,计时,相关手牌
|
||||
}
|
||||
playerRoom.act_pai = [9, seat, gang_card, -1, last_operate_seat];//牌的动画[1 put,2peng,3chi,4gang,5hu ,本次操作的座位,上个操作的牌,上个操作的牌池,自摸杠的座位]
|
||||
}
|
||||
playerRoom.hu_note[0] = 1 + last_operate_seat;//记录点炮胡
|
||||
playerRoom.hu_note[7][seat] = last_operate_seat;//记录谁被抢杠胡[-1,0,-1,-1]
|
||||
playerRoom.statis[seat][1] += 1;
|
||||
playerRoom.statis[last_operate_seat][2] += 1;
|
||||
}
|
||||
if (pai_num <= 15) {
|
||||
playerRoom.hu_note[9] = playerRoom.hu_note[0] - 1;//剩15张点炮全包
|
||||
}
|
||||
var hu_arr = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
hu_arr[0] = hu_arr[0].concat(hu_card_type);
|
||||
var type = mod_jxmj.get_hu_obj(playerRoom, seat, hu_card_type, 1);
|
||||
if (hu_person_num == 0) {
|
||||
hu_card_num = 1;
|
||||
var hu_card_type1 = playerRoom.hu_card1[seat][0];
|
||||
if (hu_card_type1 > 0) {
|
||||
var hu_big_type1 = playerRoom.hu_card1[seat][1];
|
||||
if (hu_big_type1 == 1 && playerRoom.hu_note[6][0] != seat && playerRoom.hu_note[6][1] > -1)//前个杠不是胡家
|
||||
{
|
||||
playerRoom.hu_note[6][1] = seat;//杠炮成功
|
||||
var l = playerRoom.hu_note[6][2].length;
|
||||
playerRoom.hu_note[6][2][l] = seat;//杠炮成功
|
||||
}
|
||||
var type1 = mod_jxmj.get_hu_obj(playerRoom, seat, hu_card_type1, 1);
|
||||
type.hu_type = type.hu_type.concat(type1.hu_type);
|
||||
type.point = type.point + type1.point;
|
||||
}
|
||||
playerRoom.final_hu = [seat, [hu_card_type, hu_card_type1], type, sea_seat];//最终胡:座位、胡的牌、胡的类型
|
||||
// if(pai_num<1)
|
||||
// {playerRoom.hu_note[5][seat]=seat;}//记录海底胡
|
||||
if (playerRoom.yaopai[0] == seat) {
|
||||
playerRoom.hu_note[5][seat] = seat;
|
||||
}//记录海底胡
|
||||
}
|
||||
else {
|
||||
playerRoom.act_pai = [-1, -1, 0, -1, -1];
|
||||
var hu_card_type1 = playerRoom.hu_card1[seat][0];
|
||||
if (hu_card_type1 > 0) {
|
||||
var hu_big_type1 = playerRoom.hu_card1[seat][1];
|
||||
if (hu_big_type1 == 1 && playerRoom.hu_note[6][0] != seat && playerRoom.hu_note[6][1] > -1)//前个杠不是胡家
|
||||
{
|
||||
playerRoom.hu_note[6][1] = seat;//杠炮成功
|
||||
var l = playerRoom.hu_note[6][2].length;
|
||||
playerRoom.hu_note[6][2][l] = seat;//杠炮成功
|
||||
}
|
||||
var type1 = mod_jxmj.get_hu_obj(playerRoom, seat, hu_card_type1, 1);
|
||||
type.hu_type = type.hu_type.concat(type1.hu_type);
|
||||
type.point = type.point + type1.point;
|
||||
}
|
||||
playerRoom.many_hu[hu_person_num - 1] = [seat, [hu_card_type, hu_card_type1], type, sea_seat];
|
||||
// if(pai_num<1)
|
||||
// {playerRoom.hu_note[5][seat]=seat;}//记录海底胡
|
||||
if (playerRoom.yaopai[0] == seat) {
|
||||
playerRoom.hu_note[5][seat] = seat;
|
||||
}//记录海底胡
|
||||
}
|
||||
//console.log("处理分数=" + JSON.stringify(turn_point));
|
||||
var turn_point1 = ExArray.copyArray(mod_jxmj.do_hu_point(playerRoom, type, seat));//处理分数
|
||||
|
||||
|
||||
for (var j = 0; j < 4; j++) {
|
||||
turn_point[j] = turn_point[j] + turn_point1[j];
|
||||
}
|
||||
//console.log("处理11111111111111分数=" + JSON.stringify(turn_point));
|
||||
hu_person_num += 1;
|
||||
if (mod_jxmj.config.many_hu == 0) {
|
||||
break;
|
||||
}//是否截胡
|
||||
if (i == 0 && playerRoom.tail_poker[7] == 1 && playerRoom.tail_poker[8] == seat) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//DIY
|
||||
if (playerRoom.final_hu[0]>=0&&mod_jxmj.config.whohu==1){
|
||||
playerRoom.act=[8, playerRoom.final_hu[0], 1, [throw_card], playerRoom.final_hu[3]]
|
||||
//console.log("有人先点胡",playerRoom.act);
|
||||
}
|
||||
//DIY
|
||||
//处理尾牌
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
var cards = [];
|
||||
cards_hu = ExArray.copyArray(playerRoom.final_hu[1]);
|
||||
cards = cards.concat(cards_hu);
|
||||
cards_hu = ExArray.copyArray(playerRoom.many_hu[0][1]);
|
||||
cards = cards.concat(cards_hu);
|
||||
cards_hu = ExArray.copyArray(playerRoom.many_hu[1][1]);
|
||||
cards = cards.concat(cards_hu);
|
||||
var card3 = 0, card4 = 0;
|
||||
var card = playerRoom.tail_poker[3];
|
||||
if (card > 0) {
|
||||
var pos = cards.indexOf(card);
|
||||
if (pos != -1) {
|
||||
card3 = card;
|
||||
}
|
||||
}
|
||||
var card = playerRoom.tail_poker[4];
|
||||
if (card > 0) {
|
||||
var pos = cards.indexOf(card);
|
||||
if (pos != -1) {
|
||||
card4 = card;
|
||||
}
|
||||
}
|
||||
mod_jxmj.b.clear_tail_2pai(playerRoom, card3, card4);
|
||||
}
|
||||
//mod_jxmj.b.checkBird(playerRoom,seats);
|
||||
//mod_jxmj.do_bird_point(playerRoom,turn_point);
|
||||
|
||||
mod_jxmj.do_bird_start_point(playerRoom, turn_point);
|
||||
playerRoom.hu_card = [[0, 0], [0, 0], [0, 0], [0, 0]];//胡的牌、胡的牌的原来位置
|
||||
playerRoom.hu_card1 = [[0, 0], [0, 0], [0, 0], [0, 0]];//胡的牌、胡的牌的原来位置
|
||||
}
|
||||
|
||||
}
|
||||
Binary file not shown.
250
codes/games/server/games/jinxian_mj/flow/flow_other.js
Normal file
250
codes/games/server/games/jinxian_mj/flow/flow_other.js
Normal file
@@ -0,0 +1,250 @@
|
||||
//长沙杠的处理
|
||||
mod_jxmj.get_2_wall_pai = function (playerRoom, n, seat) {
|
||||
var end_pai_pos = playerRoom.tail_poker[0];
|
||||
//0尾牌的位置,1杠补牌1的位置,2杠补牌2的位置,3杠补牌1,4杠补牌2,5筛子1,6筛子2
|
||||
playerRoom.tail_poker[8] = seat;
|
||||
playerRoom.tail_poker[7] = n;
|
||||
var r = [-1, -1];
|
||||
if (end_pai_pos == -1) {
|
||||
return r;
|
||||
}
|
||||
var pier = parseInt(end_pai_pos / 2);//第几墩
|
||||
var end_pai_poss = [-1, -1];
|
||||
if (n == 0) {
|
||||
end_pai_poss = [end_pai_pos, -1];
|
||||
//设置新的尾牌
|
||||
//var end_pai_pos=playerRoom.tail_poker[0];
|
||||
if (end_pai_pos > 0) {
|
||||
//var pier=parseInt(end_pai_pos/2);//第几墩
|
||||
var pre_pier = pier;
|
||||
var new_pier = 0;
|
||||
for (var i = 0; i < playerRoom.config.pai_num/2; i++) {
|
||||
if (pre_pier < 0) {
|
||||
pre_pier = pre_pier + playerRoom.config.pai_num/2;
|
||||
}
|
||||
if (playerRoom.poker[pre_pier * 2 + 1] > 0) {
|
||||
playerRoom.tail_poker[0] = pre_pier * 2 + 1;
|
||||
new_pier = 1;
|
||||
break;
|
||||
}
|
||||
else if (playerRoom.poker[pre_pier * 2] > 0) {
|
||||
playerRoom.tail_poker[0] = pre_pier * 2;
|
||||
new_pier = 1;
|
||||
break;
|
||||
}
|
||||
pre_pier = pre_pier - 1;
|
||||
}
|
||||
if (new_pier == 0) {
|
||||
playerRoom.tail_poker[0] = -1;
|
||||
}
|
||||
}
|
||||
end_pai_pos = playerRoom.tail_poker[0];
|
||||
end_pai_poss = [end_pai_pos, -1];
|
||||
}
|
||||
if (n == 1)//得到随机墩的牌
|
||||
{
|
||||
var sieve1 = parseInt(Math.random() * 6) + 1;
|
||||
var sieve2 = parseInt(Math.random() * 6) + 1;
|
||||
//sieve1=1;
|
||||
//sieve2=0;
|
||||
var sieve = sieve1 + sieve2;
|
||||
var pier_s = [];//倒数12墩
|
||||
//设置新的尾牌
|
||||
//var end_pai_pos=playerRoom.tail_poker[0];
|
||||
if (end_pai_pos > 0) {
|
||||
//var pier=parseInt(end_pai_pos/2);//第几墩
|
||||
var pre_pier = pier;
|
||||
var new_pier = 0;
|
||||
for (var i = 0; i < playerRoom.config.pai_num/2; i++) {
|
||||
if (pre_pier < 0) {
|
||||
pre_pier = pre_pier + playerRoom.config.pai_num/2;
|
||||
}
|
||||
if (playerRoom.poker[pre_pier * 2 + 1] > 0) {
|
||||
playerRoom.tail_poker[0] = pre_pier * 2 + 1;
|
||||
new_pier = 1;
|
||||
break;
|
||||
}
|
||||
else if (playerRoom.poker[pre_pier * 2] > 0) {
|
||||
playerRoom.tail_poker[0] = pre_pier * 2;
|
||||
new_pier = 1;
|
||||
break;
|
||||
}
|
||||
pre_pier = pre_pier - 1;
|
||||
}
|
||||
if (new_pier == 0) {
|
||||
playerRoom.tail_poker[0] = -1;
|
||||
}
|
||||
}
|
||||
var pre_pier = pier;
|
||||
for (var i = 1; i < playerRoom.config.pai_num/2; i++) {
|
||||
if (pre_pier < 0) {
|
||||
pre_pier = pre_pier + playerRoom.config.pai_num/2;
|
||||
}
|
||||
if (playerRoom.poker[pre_pier * 2 + 1] > 0) {
|
||||
pier_s[pier_s.length] = [pre_pier * 2, pre_pier * 2 + 1];
|
||||
}
|
||||
else if (playerRoom.poker[pre_pier * 2] > 0) {
|
||||
pier_s[pier_s.length] = [pre_pier * 2, pre_pier * 2 + 1];
|
||||
}
|
||||
pre_pier = pre_pier - 1;
|
||||
if (pier_s.length >= 12) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
//console.log("end_pai_poss=" + JSON.stringify(pier_s));
|
||||
// if(pier_s.length<=6)//1个筛子
|
||||
// {//sieve2=-1;
|
||||
// if(sieve1<=pier_s.length)
|
||||
// {end_pai_poss=[].concat(pier_s[sieve1-1]);}
|
||||
// else
|
||||
// {end_pai_poss=[-1,-1];}
|
||||
// }
|
||||
//else
|
||||
{
|
||||
// if(sieve<=pier_s.length)//2个筛子
|
||||
// {end_pai_poss=[].concat(pier_s[sieve-1]);}
|
||||
// else
|
||||
// {
|
||||
if (pier_s.length > 1) {
|
||||
end_pai_poss = [].concat(pier_s[pier_s.length - 1]);
|
||||
}
|
||||
else {
|
||||
end_pai_poss = [-1, -1];
|
||||
}
|
||||
// }
|
||||
}
|
||||
playerRoom.put_tail_poker[0] = 1;
|
||||
var poker0 = playerRoom.poker[end_pai_poss[0]];
|
||||
var poker1 = playerRoom.poker[end_pai_poss[1]];
|
||||
if (poker0 > 0 || poker1 > 0) {
|
||||
playerRoom.throw_card = [poker0, poker1];
|
||||
playerRoom.tail_ctrl[0] = 12;//尾牌动画控制
|
||||
}
|
||||
}
|
||||
//end_pai_poss=[-1,-1];
|
||||
playerRoom.tail_poker[1] = end_pai_poss[0];//杠补牌1的位置
|
||||
playerRoom.tail_poker[2] = end_pai_poss[1];//杠补牌2的位置
|
||||
playerRoom.tail_poker[3] = playerRoom.poker[end_pai_poss[0]] || -1;//杠补牌1
|
||||
playerRoom.tail_poker[4] = playerRoom.poker[end_pai_poss[1]] || -1;//杠补牌2
|
||||
if (n == 1 && playerRoom.tail_poker[3] == -1 && playerRoom.tail_poker[4] == -1) {
|
||||
playerRoom.put_tail_poker[0] = -1;//没拿牌,下家摸牌
|
||||
}
|
||||
playerRoom.tail_poker[5] = sieve1 || -1;//筛子1
|
||||
playerRoom.tail_poker[6] = sieve2 || -1;//筛子2
|
||||
r = ExArray.copyArray(end_pai_poss);
|
||||
//console.log("get_2_wall_pai=" + JSON.stringify(playerRoom.tail_poker));
|
||||
return r;
|
||||
}
|
||||
//card3,card4胡杠碰吃的牌
|
||||
mod_jxmj.b.clear_tail_2pai = function (playerRoom, card3, card4) {
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
var seat = playerRoom.tail_poker[8];
|
||||
card3 = card3 || 0;
|
||||
card4 = card4 || 0;
|
||||
if (card3 > 0 && card4 > 0) {
|
||||
var throw_card3 = playerRoom.tail_poker[3];
|
||||
var throw_card4 = playerRoom.tail_poker[4];
|
||||
if (card3 == playerRoom.tail_poker[3]) {
|
||||
playerRoom.sea[seat] = playerRoom.sea[seat].concat(throw_card4);
|
||||
}
|
||||
else if (card3 == playerRoom.tail_poker[4]) {
|
||||
playerRoom.sea[seat] = playerRoom.sea[seat].concat(throw_card3);
|
||||
}
|
||||
if (card4 == playerRoom.tail_poker[3]) {
|
||||
playerRoom.sea[seat] = playerRoom.sea[seat].concat(throw_card4);
|
||||
}
|
||||
else if (card4 == playerRoom.tail_poker[4]) {
|
||||
playerRoom.sea[seat] = playerRoom.sea[seat].concat(throw_card3);
|
||||
}
|
||||
}
|
||||
else if (card3 > 0 && card4 <= 0) {
|
||||
var throw_card3 = playerRoom.tail_poker[3];
|
||||
var throw_card4 = playerRoom.tail_poker[4];
|
||||
if (card3 == playerRoom.tail_poker[3]) {
|
||||
playerRoom.sea[seat] = playerRoom.sea[seat].concat(throw_card4);
|
||||
}
|
||||
else if (card3 == playerRoom.tail_poker[4]) {
|
||||
playerRoom.sea[seat] = playerRoom.sea[seat].concat(throw_card3);
|
||||
}
|
||||
}
|
||||
|
||||
var first_poker_pos = playerRoom.tail_poker[1];//牌墙尾牌
|
||||
if (first_poker_pos != -1) {
|
||||
playerRoom.poker[first_poker_pos] = -1;
|
||||
}//摸牌出牌后牌墙手牌清空
|
||||
var first_poker_pos = playerRoom.tail_poker[2];//牌墙尾牌
|
||||
if (first_poker_pos != -1) {
|
||||
playerRoom.poker[first_poker_pos] = -1;
|
||||
}//摸牌出牌后牌墙手牌清空
|
||||
playerRoom.put_tail_poker[0] = 0;
|
||||
}
|
||||
}
|
||||
//判断杠后:再杠&流局
|
||||
mod_jxmj.judge_do_2pai_gang = function (playerRoom, seat, n, gang_card, mode) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
mode = mode || 0;
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
//if(playerRoom.tail_poker[8]==seat && gang_card)
|
||||
if (playerRoom.tail_poker[7] == 1 && gang_card) {//另一张牌放入sea
|
||||
mod_jxmj.b.clear_tail_2pai(playerRoom, gang_card, 0);
|
||||
//console.log("1judge_do_2pai_gang=" + JSON.stringify(playerRoom.tail_poker));
|
||||
}
|
||||
if (mode == 1)//明杠
|
||||
{
|
||||
var last_seat = playerRoom.last_operate[2];
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
last_seat = -1;
|
||||
}
|
||||
mod_jxmj.seatohand(playerRoom, [gang_card, gang_card, gang_card, gang_card], 2, seat, gang_card, last_seat);
|
||||
}
|
||||
mod_jxmj.get_2_wall_pai(playerRoom, n, seat);
|
||||
if (playerRoom.tail_poker[7] > -1) {
|
||||
//console.log("2judge_do_2pai_gang=" + JSON.stringify(playerRoom.tail_poker));
|
||||
var tail_card1 = playerRoom.tail_poker[3];
|
||||
var peng1 = 0;
|
||||
if (tail_card1 > 0) {
|
||||
mod_jxmj.judge_bar(playerRoom, seat, tail_card1);
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
peng1 = mod_jxmj.judge_bar_bump_eat(playerRoom, tail_card1, seat, 1);
|
||||
}
|
||||
}
|
||||
var tail_card2 = playerRoom.tail_poker[4];
|
||||
var peng2 = 0;
|
||||
if (tail_card2 > 0) {
|
||||
mod_jxmj.judge_bar(playerRoom, seat, tail_card2);
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
peng2 = mod_jxmj.judge_bar_bump_eat(playerRoom, tail_card2, seat, 1);
|
||||
}
|
||||
}
|
||||
var tail_cards = [tail_card1, tail_card2];
|
||||
mod_jxmj.liuJu(playerRoom, seat, tail_cards);
|
||||
//判断其他玩家吃碰杠
|
||||
//判断点胡
|
||||
if (playerRoom.tail_poker[7] == 1) {
|
||||
var peng = peng1 || peng2 || 0;
|
||||
//mod_jxmj.set_time(playerRoom);
|
||||
var hu_seat = mod_jxmj.hu_pai_dianhu(playerRoom, seat, [tail_card1, tail_card2]);
|
||||
if (hu_seat.length > 0) {
|
||||
//一炮多响
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (hu_seat[i]) {
|
||||
playerRoom.user_eat_bump[i][5] = 2;//吃胡
|
||||
playerRoom.guopai[i] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (peng == 0) {
|
||||
var last_seat = playerRoom.last_operate[2];
|
||||
var next_seat = last_seat + 1;
|
||||
if (next_seat > person - 1) {
|
||||
next_seat = 0;
|
||||
}
|
||||
mod_jxmj.liuJu(playerRoom, next_seat);
|
||||
}
|
||||
}
|
||||
playerRoom.user_ctrl[3] = -1;
|
||||
if (playerRoom.tail_poker[7] == 0) {
|
||||
playerRoom.user_ctrl[3] = playerRoom.tail_poker[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
176
codes/games/server/games/jinxian_mj/flow/flow_start_play_way.js
Normal file
176
codes/games/server/games/jinxian_mj/flow/flow_start_play_way.js
Normal file
@@ -0,0 +1,176 @@
|
||||
//特殊胡判断
|
||||
//起手胡玩法
|
||||
mod_jxmj.b.start_hu=function (playerRoom,arr)
|
||||
{try{
|
||||
var arr0=ExArray.copyArray(arr[0]);
|
||||
ExArray.ordArray(arr0);
|
||||
var arr_zuhe=[];
|
||||
var hu={}
|
||||
hu.hu=[0,0,0,0,0,0,0];
|
||||
playerRoom.roomtype[12]=playerRoom.roomtype[12] || [1,1,1,1,1,1,1];
|
||||
if(playerRoom.roomtype[11]==1)//允许起手胡
|
||||
{
|
||||
if(playerRoom.roomtype[12][0]==1)
|
||||
{
|
||||
for(var i=0;i<arr0.length-3;i++)
|
||||
{
|
||||
if(arr0[i]==arr0[i+1] && arr0[i]==arr0[i+2] && arr0[i]==arr0[i+3])
|
||||
{hu.hu[0]+=1;
|
||||
var arr_zuhe1=[arr0[i],arr0[i+1],arr0[i+2],arr0[i+3]];
|
||||
arr_zuhe=mod_jxmj.b.arr2to1(arr_zuhe,arr_zuhe1);
|
||||
}//大四喜
|
||||
}
|
||||
}
|
||||
if(playerRoom.roomtype[12][1]==1)
|
||||
{
|
||||
var arr0=ExArray.copyArray(arr[0]);
|
||||
ExArray.ordArray(arr0);
|
||||
var hu258=0;
|
||||
for(var i=0;i<arr0.length;i++)
|
||||
{
|
||||
if(arr0[i]!=2 && arr0[i]!=5 && arr0[i]!=8 && arr0[i]!=12 && arr0[i]!=15 && arr0[i]!=18 && arr0[i]!=22 && arr0[i]!=25 && arr0[i]!=28)
|
||||
{hu258=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(hu258==0)
|
||||
{hu.hu[1]=1;
|
||||
arr_zuhe=arr0;
|
||||
}//板板胡
|
||||
}
|
||||
if(playerRoom.roomtype[12][2]==1)
|
||||
{
|
||||
var arr0=ExArray.copyArray(arr[0]);
|
||||
ExArray.ordArray(arr0);
|
||||
var colour=[0,0,0];
|
||||
for(var i=0;i<arr0.length;i++)
|
||||
{colour[parseInt(arr0[i]/10)]+=1
|
||||
}
|
||||
for(var i=0;i<3;i++)
|
||||
{
|
||||
if(colour[i]==0)
|
||||
{hu.hu[2]=1;//缺一色
|
||||
arr_zuhe=arr0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(playerRoom.roomtype[12][3]==1)
|
||||
{
|
||||
var arr0=ExArray.copyArray(arr[0]);
|
||||
ExArray.ordArray(arr0);
|
||||
var ke_n=0;
|
||||
var arr1=0;
|
||||
var arr_zuhe1=[];
|
||||
for(var i=0;i<arr0.length-2;i++)
|
||||
{
|
||||
if(arr0[i]!=arr1 && arr0[i]==arr0[i+1] && arr0[i]==arr0[i+2])
|
||||
{ke_n+=1;
|
||||
arr1=arr0[i];
|
||||
var arr_zuhe2=[arr0[i],arr0[i+1],arr0[i+2]];
|
||||
arr_zuhe1=mod_jxmj.b.arr2to1(arr_zuhe1,arr_zuhe2);
|
||||
}
|
||||
}
|
||||
if(ke_n>=2)
|
||||
{hu.hu[3]=parseInt(ke_n/2);
|
||||
var arr_zuhe2=arr_zuhe1.slice(0,hu.hu[3]*6);
|
||||
arr_zuhe=mod_jxmj.b.arr2to1(arr_zuhe,arr_zuhe2);
|
||||
}//六六顺
|
||||
}
|
||||
if(playerRoom.roomtype[12][4]==1)
|
||||
{
|
||||
var arr0=ExArray.copyArray(arr[0]);
|
||||
ExArray.ordArray(arr0);
|
||||
var n=0;
|
||||
var arr1=ExArray.copyArray(arr0);
|
||||
for(var i=0;i<arr1.length-1;i++)
|
||||
{
|
||||
if(arr1[i]>0 && arr1[i]==arr1[i+1] && arr1[i]<10)
|
||||
{var pos=arr1.indexOf(arr1[i]+10);
|
||||
if(pos!=-1 && arr1[pos+1] && arr1[pos]==arr1[pos+1])
|
||||
{var pos1=arr1.indexOf(arr1[pos]+10);
|
||||
if(pos1!=-1 && arr1[pos1+1] && arr1[pos1]==arr1[pos1+1])
|
||||
{n+=1;
|
||||
var arr_zuhe1=[arr1[i],arr1[i+1],arr1[pos],arr1[pos+1],arr1[pos1],arr1[pos1+1]];
|
||||
arr_zuhe=mod_jxmj.b.arr2to1(arr_zuhe,arr_zuhe1);
|
||||
arr1[i]=0;arr1[i+1]=0;arr1[pos]=0;arr1[pos+1]=0;arr1[pos1]=0;arr1[pos1+1]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(n>0)
|
||||
{hu.hu[4]=n;}//三同
|
||||
}
|
||||
if(playerRoom.roomtype[12][5]==1)
|
||||
{
|
||||
var arr0=ExArray.copyArray(arr[0]);
|
||||
ExArray.ordArray(arr0);
|
||||
var arr_Contrast=[[1,2,3,4,5,6,7,8,9],[11,12,13,14,15,16,17,18,19],[21,22,23,24,25,26,27,28,29]];
|
||||
for(j=0;j<3;j++)
|
||||
{var n=0;
|
||||
if(hu.hu[5]==0)
|
||||
{
|
||||
for(i=0;i<9;i++)
|
||||
{
|
||||
if(arr0.indexOf(arr_Contrast[j][i])!=-1)
|
||||
{n+=1;
|
||||
if(n==9)
|
||||
{hu.hu[5]=1;//一条龙
|
||||
arr_zuhe=mod_jxmj.b.arr2to1(arr_zuhe,arr_Contrast[j]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(hu.hu[5]==1)
|
||||
{break;}
|
||||
}
|
||||
}
|
||||
if(playerRoom.roomtype[12][6]==1)
|
||||
{
|
||||
var arr0=ExArray.copyArray(arr[0]);
|
||||
ExArray.ordArray(arr0);
|
||||
var n=0;
|
||||
var arr1=ExArray.copyArray(arr0);
|
||||
for(var i=0;i<arr1.length-1;i++)
|
||||
{
|
||||
if(arr1[i]>0 && arr1[i]==arr1[i+1])
|
||||
{var pos=arr1.indexOf(arr1[i]+1);
|
||||
if(pos!=-1 && arr1[pos+1] && arr1[pos]==arr1[pos+1])
|
||||
{var pos1=arr1.indexOf(arr1[pos]+1);
|
||||
if(pos1!=-1 && arr1[pos1+1] && arr1[pos1]==arr1[pos1+1])
|
||||
{n+=1;
|
||||
var arr_zuhe1=[arr1[i],arr1[i+1],arr1[pos],arr1[pos+1],arr1[pos1],arr1[pos1+1]];
|
||||
arr_zuhe=mod_jxmj.b.arr2to1(arr_zuhe,arr_zuhe1);
|
||||
arr1[i]=0;arr1[i+1]=0;arr1[pos]=0;arr1[pos+1]=0;arr1[pos1]=0;arr1[pos1+1]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(n>0)
|
||||
{hu.hu[6]=n;}//节节高
|
||||
}
|
||||
}
|
||||
hu.zuhe=ExArray.copyArray(arr_zuhe);
|
||||
return hu;
|
||||
}catch(e){//console.log(e);//console.log("name: " + e.name + "message: " + e.message + "lineNumber: " + e.lineNumber + "fileName: " + e.fileName);
|
||||
}}
|
||||
//数组合并
|
||||
mod_jxmj.b.arr2to1=function (arr0,arr1)
|
||||
{ExArray.ordArray(arr0);
|
||||
ExArray.ordArray(arr1);
|
||||
for(var i=0;i<arr0.length;i++)
|
||||
{var pos=arr1.indexOf(arr0[i]);
|
||||
if(pos!=-1)
|
||||
{arr1[pos]=0;
|
||||
}
|
||||
}
|
||||
var arr2=ExArray.copyArray(arr0);
|
||||
for(var i=0;i<arr1.length;i++)
|
||||
{
|
||||
if(arr1[i]>0)
|
||||
{arr2=arr2.concat(arr1[i]);}
|
||||
}
|
||||
ExArray.ordArray(arr2);
|
||||
return arr2;
|
||||
}
|
||||
216
codes/games/server/games/jinxian_mj/flow/flow_sys.js
Normal file
216
codes/games/server/games/jinxian_mj/flow/flow_sys.js
Normal file
@@ -0,0 +1,216 @@
|
||||
//以下代码是什么目的?
|
||||
//记录定位IP防作弊,以及房主的可以作的操作
|
||||
//以下代码是什么时候执行?
|
||||
//在进入房间的时候执行,房主创建房间后还在等其他人的时候,每次有人进入都执行1次,需要客户端发过来有人进房间的包
|
||||
|
||||
//记录用户的定位坐标
|
||||
mod_jxmj.addr = function(pack){
|
||||
try{
|
||||
var agentid = pack.data.agentid;
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var o_room =mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room)
|
||||
{return;}
|
||||
if(pack.data.addr!=undefined)
|
||||
{
|
||||
if(o_room.infinite == 0 && o_room.roomtype[11] && !o_room.battlestate) {
|
||||
mod_jxmj[roomcode] = mod_jxmj[roomcode] || {};
|
||||
mod_jxmj[roomcode].deal_ip=mod_jxmj[roomcode].deal_ip || [1,0,0,0];
|
||||
}
|
||||
|
||||
playerRoom=playerRoom || {};
|
||||
playerRoom.addr=playerRoom.addr || [];
|
||||
if(pack.data.addr==-1)
|
||||
{playerRoom.addr[seat]=[];}
|
||||
else
|
||||
{playerRoom.addr[seat]=pack.data.addr;}
|
||||
if(pack.data.leave!=undefined && pack.data.leave>-1)
|
||||
{playerRoom.addr[pack.data.leave]=[];
|
||||
if(o_room.infinite == 0 && (o_room.roomtype[9]||o_room.roomtype[11]) && !o_room.battlestate) {
|
||||
mod_jxmj[roomcode].deal_ip[pack.data.leave] = 0;
|
||||
}
|
||||
}
|
||||
for(var i=0;i<4;i++)
|
||||
{
|
||||
if (!o_room.seatlist[i]) {
|
||||
playerRoom.addr[i]=[];
|
||||
}
|
||||
}
|
||||
if(o_room.infinite == 0 && o_room.roomtype[11] && !o_room.battlestate) {
|
||||
var msg = {};
|
||||
msg.conmode = o_room.seatlist[seat].conmode;
|
||||
msg.fromid = o_room.seatlist[seat].fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "tips";
|
||||
if(!playerRoom.addr[seat].length) {
|
||||
msg.data = {
|
||||
"tips": 6,
|
||||
};
|
||||
mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, seat);
|
||||
|
||||
}else{
|
||||
msg.data = {
|
||||
"tips": 5,
|
||||
};
|
||||
|
||||
}
|
||||
youle_room.app.SendPack(msg); //ExObject.log("kickout="+seat);
|
||||
}
|
||||
var msg = {};
|
||||
msg.conmode =pack.conmode;
|
||||
msg.fromid =pack.fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "addr";
|
||||
msg.data = {};
|
||||
msg.addr=playerRoom.addr;
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
}
|
||||
}catch(e){//console.log(e);
|
||||
}}
|
||||
|
||||
//记录用户的ip
|
||||
mod_jxmj.ip = function(pack){
|
||||
try{
|
||||
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 =mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room)
|
||||
{return;}
|
||||
if(pack.data.ip!=undefined)
|
||||
{
|
||||
if(o_room.infinite != 1 && o_room.roomtype[9] && !o_room.battlestate) {
|
||||
mod_jxmj[roomcode]=mod_jxmj[roomcode] || {};
|
||||
mod_jxmj[roomcode].deal_ip=mod_jxmj[roomcode].deal_ip || [1,0,0,0];
|
||||
}
|
||||
if(pack.data.leave!=undefined && pack.data.leave>-1) {
|
||||
if(o_room.infinite != 1 && (o_room.roomtype[9]||o_room.roomtype[11]) && !o_room.battlestate) {
|
||||
mod_jxmj[roomcode].deal_ip[pack.data.leave] = 0;
|
||||
}
|
||||
}
|
||||
mod_jxmj.Storage_read();
|
||||
mod_jxmj[roomcode]=mod_jxmj[roomcode] || {};
|
||||
var playerRoom=mod_jxmj[roomcode];
|
||||
playerRoom.roomcode=roomcode || {};
|
||||
playerRoom.ip=playerRoom.ip || [];
|
||||
|
||||
if (o_room.infinite != 1 && o_room.roomtype[9] && !o_room.battlestate) {
|
||||
var ban = 0;
|
||||
var msg = {};
|
||||
msg.conmode = o_room.seatlist[seat].conmode;
|
||||
msg.fromid = o_room.seatlist[seat].fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "tips";
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (i!=seat&&o_room.seatlist[i]&&o_room.seatlist[i].ip == o_room.seatlist[seat].ip&&mod_jxmj[roomcode].deal_ip[seat]==0) {
|
||||
ban = 1;
|
||||
pack.data.ip = -1;
|
||||
msg.data = {
|
||||
"tips": 4,
|
||||
};
|
||||
mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, seat);
|
||||
mod_jxmj[roomcode].deal_ip[seat] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(ban == 0) {
|
||||
pack.data.ip = -1;
|
||||
msg.data = {
|
||||
"tips": 5,
|
||||
};
|
||||
mod_jxmj[roomcode].deal_ip[seat]=1;
|
||||
}
|
||||
youle_room.app.SendPack(msg); //ExObject.log("kickout="+seat);
|
||||
}
|
||||
|
||||
if(pack.data.ip==-1)
|
||||
{playerRoom.ip[seat]=[];}
|
||||
else
|
||||
{playerRoom.ip[seat]=pack.data.ip;}
|
||||
for(var i=0;i<4;i++)
|
||||
{
|
||||
if (!o_room.seatlist[i]) {
|
||||
playerRoom.ip[i]=[];
|
||||
}
|
||||
}
|
||||
var msg = {};
|
||||
msg.conmode =pack.conmode;
|
||||
msg.fromid =pack.fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "ip";
|
||||
msg.data = {};
|
||||
msg.ips=playerRoom.ip;
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
}
|
||||
}catch(e){//console.log(e);
|
||||
}}
|
||||
|
||||
//模拟用户退出房间
|
||||
mod_jxmj.exit = function(pack){
|
||||
try{
|
||||
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 =mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room)
|
||||
{return;}
|
||||
if(pack.data.exit!=undefined && seat==0 && pack.data.exit>0 && !o_room.makewartime)
|
||||
{var msg = {};
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "exit";
|
||||
msg.data = {};
|
||||
msg.exit=pack.data.exit;
|
||||
i=pack.data.exit;
|
||||
if (o_room.seatlist[i]) {
|
||||
msg.conmode = o_room.seatlist[i].conmode;
|
||||
msg.fromid = o_room.seatlist[i].fromid;
|
||||
youle_room.app.SendPack(msg);
|
||||
}
|
||||
}
|
||||
}catch(e){//console.log(e);
|
||||
}}
|
||||
|
||||
//模拟用户同意解散
|
||||
mod_jxmj.agree = function(pack){
|
||||
try{
|
||||
var agentid = pack.data.agentid;
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var o_room =mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room)
|
||||
{return;}
|
||||
if(pack.data.agree!=undefined)
|
||||
{
|
||||
if(pack.data.agree==1)
|
||||
{playerRoom.agree[seat]=seat;}
|
||||
else if(pack.data.agree==0)
|
||||
{playerRoom.agree=[-1,-1,-1,-1];}
|
||||
var msg = {};
|
||||
msg.conmode =pack.conmode;
|
||||
msg.fromid =pack.fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "agree";
|
||||
msg.data = {};
|
||||
msg.agree=playerRoom.agree;
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
}
|
||||
}catch(e){//console.log(e);
|
||||
}}
|
||||
|
||||
96
codes/games/server/games/jinxian_mj/flow/method_operate.js
Normal file
96
codes/games/server/games/jinxian_mj/flow/method_operate.js
Normal file
@@ -0,0 +1,96 @@
|
||||
//碰杠胡操作处理入口
|
||||
mod_jxmj.poker_seatohand = function (o_room, playerRoom, seat, operate) {
|
||||
//人数
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var r = 0;
|
||||
var throw_card = playerRoom.throw_card;//上家出过的牌
|
||||
var jing = playerRoom.jing[1];//精
|
||||
var last_seat = playerRoom.user_ctrl[1];//上个控制权用户
|
||||
var pos = playerRoom.user_ctrl[8];//下次要摸牌的位置
|
||||
var first_card = playerRoom.poker[pos];//最近的可摸得牌
|
||||
//上个操作是吃 碰,当前不发牌
|
||||
if (playerRoom.last_operate[0] == 1 || playerRoom.last_operate[0] == 3) {
|
||||
first_card = -1;
|
||||
}
|
||||
// if(operate[2]>0 && playerRoom.tail_poker[7]>-1 && operate[0]>=4 && operate[0]<=5)
|
||||
// {
|
||||
// if(playerRoom.tail_poker[3]==operate[1])
|
||||
// {first_card=playerRoom.tail_poker[3];}
|
||||
// else if(playerRoom.tail_poker[4]==operate[1])
|
||||
// {first_card=playerRoom.tail_poker[4];}
|
||||
// else if(playerRoom.hand[seat][0].indexOf(operate[1])!=-1)
|
||||
// {
|
||||
// if(playerRoom.tail_poker[7]==1)
|
||||
// {first_card=-1;}
|
||||
// }
|
||||
// else
|
||||
// {return r;}
|
||||
// }
|
||||
var check_gang = 1;//杠的不是刚摸的牌,是手牌
|
||||
var arr0 = mod_jxmj.get_common_oparate_poker(o_room, playerRoom, seat, operate);
|
||||
r = mod_jxmj.operate_hu(o_room, playerRoom, seat, operate);//处理胡牌0
|
||||
var r1 = mod_jxmj.operate_gang_AnGang_JiaGang(o_room, playerRoom, seat, operate);
|
||||
if (r1 > 0) {
|
||||
r = r1;
|
||||
}
|
||||
//杠碰吃、自摸杠暗杠、5,6胡听
|
||||
if (arr0 && arr0.length > 0 || arr0 && arr0 == 2 || arr0 && arr0 == 3) {
|
||||
if (arr0 == 3) {
|
||||
r = 1;
|
||||
}
|
||||
else if (arr0 == 2) {
|
||||
r = 2;
|
||||
}
|
||||
//放到亮牌处
|
||||
else if (operate[0] < 4 || operate[0] == 6) {//mod_jxmj.seatohand(playerRoom,arr0,operate[0],seat,throw_card);
|
||||
r = 1;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
//处理用户过的操作
|
||||
mod_jxmj.operate_guo = function (o_room, playerRoom, seat, operate) {
|
||||
var arr = [];
|
||||
var sea_seat = playerRoom.last_operate[2];
|
||||
playerRoom.guopai[seat] = 0;
|
||||
playerRoom.hu_card[seat] = [0, 0];
|
||||
//处理长沙杠后胡
|
||||
if (seat == playerRoom.tail_poker_hu[2][seat]) {
|
||||
if (seat == playerRoom.tail_poker_hu[0]) {
|
||||
playerRoom.tail_poker_hu = [-1, 0, [-1, -1, -1, -1], 0, [-1, -1, -1, -1]];//谁杠,胡牌0,[胡牌座位],胡牌1,[胡牌座位]
|
||||
}
|
||||
if (seat != playerRoom.tail_poker_hu[0]) {
|
||||
playerRoom.tail_poker_hu[2][seat] = -1;
|
||||
var n = 0;
|
||||
for (var i = 0; i < 6; i++) {
|
||||
if (playerRoom.tail_poker_hu[2][i] == -1) {
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
if (n == 4) {
|
||||
playerRoom.tail_poker_hu[1] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (seat == playerRoom.tail_poker_hu[4][seat]) {
|
||||
if (seat == playerRoom.tail_poker_hu[0]) {
|
||||
playerRoom.tail_poker_hu = [-1, 0, [-1, -1, -1, -1], 0, [-1, -1, -1, -1]];//谁杠,胡牌0,[胡牌座位],胡牌1,[胡牌座位]
|
||||
}
|
||||
if (seat != playerRoom.tail_poker_hu[0]) {
|
||||
playerRoom.tail_poker_hu[4][seat] = -1;
|
||||
var n = 0;
|
||||
for (var i = 0; i < 6; i++) {
|
||||
if (playerRoom.tail_poker_hu[4][i] == -1) {
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
if (n == 4) {
|
||||
playerRoom.tail_poker_hu[3] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
arr = mod_jxmj.re_common_oparate(o_room, playerRoom, seat, operate, sea_seat, 1);
|
||||
return arr;
|
||||
}
|
||||
597
codes/games/server/games/jinxian_mj/flow/method_save.js
Normal file
597
codes/games/server/games/jinxian_mj/flow/method_save.js
Normal file
@@ -0,0 +1,597 @@
|
||||
//在每局结算和解散时需要保存数据
|
||||
|
||||
//保存无限局分数
|
||||
mod_jxmj.save_infinite = function (playerRoom, o_room, pack) {
|
||||
var roomcode = playerRoom.roomcode;
|
||||
//todo 判断比赛场
|
||||
if (playerRoom.turn[1] + 1 == playerRoom.turn[2]) {
|
||||
clearInterval(playerRoom.offline_alltimer);
|
||||
playerRoom.offline_alltimer=-1;
|
||||
}
|
||||
if (playerRoom.status !=2){
|
||||
return;
|
||||
}
|
||||
playerRoom.online_undo_time=[0,0,0,0];//重置
|
||||
playerRoom.online_undo=[0,0,0,0];
|
||||
if (o_room.infinite && o_room.infinite == 1 && playerRoom.final_hu[0] > -1|| (playerRoom.roomtype[14]==3||playerRoom.roomtype[14]==4)&&playerRoom.final_hu[0] > -1) {
|
||||
acount_lose_deal();
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
o_room.seatlist[i].gameinfo.isprepare = 0;
|
||||
o_room.seatlist[i].gameinfo.isbet = 0;
|
||||
}
|
||||
}
|
||||
//playerRoom.save=0;
|
||||
var turn = playerRoom.turn[1];
|
||||
var arr_grade = [], win_grade = 0, win_rate_all = 0, sum = 0;
|
||||
var beishu=playerRoom.roomtype[16][1];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
|
||||
arr_grade[i] = playerRoom.turn_point[turn][i]*beishu;//playerRoom.turn_point[turn][i];
|
||||
if (arr_grade[i] < 0 && o_room.seatlist[i].bean + arr_grade[i] < 0) {
|
||||
arr_grade[i] = -o_room.seatlist[i].bean;
|
||||
}
|
||||
if (arr_grade[i] < 0) {
|
||||
win_grade = win_grade - arr_grade[i];
|
||||
}
|
||||
if (arr_grade[i] > 0) {
|
||||
win_rate_all += playerRoom.turn_point[turn][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
if (playerRoom.turn_point[turn][i] > 0) {
|
||||
arr_grade[i] = parseInt(win_grade * playerRoom.turn_point[turn][i]/ win_rate_all);
|
||||
}
|
||||
}
|
||||
}
|
||||
var new_arr_grade = [];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
sum += arr_grade[i];
|
||||
new_arr_grade[i] = [arr_grade[i], i];
|
||||
}
|
||||
}
|
||||
// if (sum > 0) {
|
||||
// mod_jxmj.ords(new_arr_grade);
|
||||
// for (var i = 0; i < 4; i++) {
|
||||
// if (o_room.seatlist[i] && new_arr_grade[i][0] > 0) {
|
||||
// if (new_arr_grade[i][0] > sum) {
|
||||
// new_arr_grade[i][0] -= sum;
|
||||
// break;
|
||||
// }
|
||||
// else {
|
||||
// new_arr_grade[i][0] = 0;
|
||||
// sum -= new_arr_grade[i][0];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// mod_jxmj.ords_un(new_arr_grade);
|
||||
// }
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
arr_grade[i] = new_arr_grade[i][0];
|
||||
}
|
||||
}
|
||||
var nowCount = turn + 1;
|
||||
//arr_grade=[100,100,100];
|
||||
//mod_jxmj.app.youle_room.export.change_seat(o_room, seat1, seat2);
|
||||
//arr_grade[0]=-1500;
|
||||
//处理再茶水费后金币成负数
|
||||
// var tea_cost=o_room.rebateNumber || 0;
|
||||
// for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
// if (o_room.seatlist[i]) {
|
||||
// if(o_room.seatlist[i].bean+arr_grade[i]<tea_cost)
|
||||
// {arr_grade[i]+=tea_cost-(o_room.seatlist[i].bean+arr_grade[i]);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
mod_jxmj.app.youle_room.export.save_grade_aset(o_room, arr_grade, nowCount);//保存输赢星星
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
o_room.seatlist[i].gameinfo.grade += arr_grade[i];
|
||||
o_room.seatlist[i].bean += arr_grade[i];
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
if (playerRoom.robot[i] != 1) {
|
||||
var msg = {};
|
||||
msg.conmode = o_room.seatlist[i].conmode;
|
||||
msg.fromid = o_room.seatlist[i].fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "start";
|
||||
msg.grade = [];
|
||||
for (var j = 0; j < o_room.seatlist.length; j++) {
|
||||
if (o_room.seatlist[j]) {
|
||||
msg.grade[j] = o_room.seatlist[j].bean;
|
||||
}
|
||||
}
|
||||
youle_room.app.SendPack(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playerRoom.turn[1] + 1 < playerRoom.turn[2]) {
|
||||
mod_jxmj.ready_kickout(o_room, playerRoom);
|
||||
}
|
||||
var beanfloor = mod_jxmj.get_beanfloor(o_room.roomtype) || 0;
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
var ran = parseInt(Math.random() * 2 + 4);
|
||||
if (o_room.seatlist[i].bean < beanfloor || o_room.seatlist[i].bean <= 0 || ran>0 && playerRoom.robot[i]==1) {
|
||||
setTimeout(mod_jxmj.kickout3, ran*1000, o_room, i);
|
||||
playerRoom.kick_seat[i] =1;
|
||||
//mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, i);
|
||||
clearTimeout(playerRoom.kick_timer[i]);//清空踢人计时器
|
||||
playerRoom.kick_timer[i] = -1;
|
||||
playerRoom.robot[i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
clearInterval(playerRoom.timer[2]);
|
||||
clearInterval(playerRoom.timer[3]);
|
||||
playerRoom.timer[2]=-1;
|
||||
playerRoom.timer[3]=-1;
|
||||
clearTimeout(playerRoom.mopai_timer[0]);
|
||||
clearTimeout(playerRoom.mopai_timer[2]);
|
||||
playerRoom.mopai_timer[0]=-1;
|
||||
playerRoom.mopai_timer[2]=-1;
|
||||
for (var j = 0; j < playerRoom.robot_count.length; j++) {
|
||||
if (playerRoom.robot_count[j]<0){
|
||||
playerRoom.robot_count[j]=0;
|
||||
}
|
||||
}
|
||||
playerRoom.person_info =[];
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]){
|
||||
var msg_info={}
|
||||
msg_info.avatar=o_room.seatlist[i].avatar;
|
||||
msg_info.nickname=o_room.seatlist[i].nickname;
|
||||
msg_info.playerid=o_room.seatlist[i].playerid;
|
||||
msg_info.bean=o_room.seatlist[i].bean;
|
||||
playerRoom.person_info[i]=msg_info;
|
||||
}
|
||||
}
|
||||
var ran = parseInt(Math.random() * 3) + 3;
|
||||
if (playerRoom.turn[1] + 1 == playerRoom.turn[2]) {
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
mod_jxmj.app.youle_room.export.kickplayer_inroom(o_room, i);
|
||||
}
|
||||
}
|
||||
mod_jxmj.app.youle_room.export.save_grade(o_room, 0, 0, 1);
|
||||
clearInterval(playerRoom.timer[0]);
|
||||
clearInterval(playerRoom.timer[1]);
|
||||
clearInterval(playerRoom.timer[2]);
|
||||
playerRoom.timer[0]=-1;
|
||||
playerRoom.timer[1]=-1;
|
||||
playerRoom.timer[2]=-1;
|
||||
playerRoom = {};
|
||||
playerRoom = null;
|
||||
mod_jxmj.Storage_clear(roomcode, o_room);
|
||||
}
|
||||
else {
|
||||
playerRoom.timer[3] = setTimeout(mod_jxmj.start_ready, ran * 1000, pack, roomcode, o_room);
|
||||
}
|
||||
mod_jxmj.count=mod_jxmj.count || 0;
|
||||
if(mod_jxmj.count<99999999)
|
||||
{mod_jxmj.count+=1;}
|
||||
if (mod_jxmj.count) {localStorage.setItem(mod_jxmj.route+"_count", JSON.stringify(mod_jxmj.count));}
|
||||
return;
|
||||
}
|
||||
function acount_lose_deal() {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var len = playerRoom.turn_point.length;
|
||||
for (let i = 0; i < person; i++) {
|
||||
if(playerRoom.robot[i]==-1){
|
||||
playerRoom.gold_account_lose[i].total++;
|
||||
if(!!playerRoom.turn_point[len-1]) {
|
||||
if(playerRoom.turn_point[len-1][i]<0) {
|
||||
playerRoom.gold_account_lose[i].lose++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
mod_jxmj.save = function (playerRoom, o_room, freeroomflag) {
|
||||
var roomcode = playerRoom.roomcode;
|
||||
if (o_room.infinite && o_room.infinite == 1) {
|
||||
return;
|
||||
}
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var ban = 0, r = {};
|
||||
|
||||
if (!o_room.infinite && o_room.roomtype[15]) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
o_room.seatlist[i].gameinfo.isprepare = 0;
|
||||
o_room.seatlist[i].gameinfo.isbet = 0;
|
||||
}
|
||||
}
|
||||
if (playerRoom.turn[1] + 1 < playerRoom.turn[2]) {
|
||||
mod_jxmj.auto_ready(o_room, playerRoom);
|
||||
}
|
||||
}
|
||||
|
||||
//if(playerRoom.turn[1]==0 && playerRoom.final_hu[0]==-1)
|
||||
//if(playerRoom.turn[1]==0 && playerRoom.final_hu[0]==-1)
|
||||
//{
|
||||
// for(var i=0;i<4;i++)
|
||||
// {
|
||||
// if(playerRoom.user_point[i]!=0)
|
||||
// {ban=1;}
|
||||
// }
|
||||
if (freeroomflag == 1)//解散
|
||||
{
|
||||
var turn = playerRoom.turn[1];
|
||||
if (ban == 0 && playerRoom.turn_point[turn] != undefined && playerRoom.final_hu[0] == -1) {
|
||||
//mod_jxmj.gang(playerRoom);
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.turn_point[turn][i] != 0) {
|
||||
playerRoom.user_point[i] += playerRoom.turn_point[turn][i];
|
||||
ban = 1;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.user_point[i] != 0 || turn > 0) {
|
||||
ban = 1;
|
||||
}
|
||||
}
|
||||
if (ban == 1) {
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
if (playerRoom.robot[i] == -1) {
|
||||
o_room.seatlist[i].gameinfo.isbet = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
r.user_point = ExArray.copyArray(playerRoom.user_point);//第1局没结束时解散时,计算的分数
|
||||
var turn = playerRoom.turn[1];
|
||||
r.turn_point = ExArray.copyArray(playerRoom.turn_point[turn]);//第1局没结束时解散时,计算的分数
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playerRoom.save == 1) {
|
||||
ban = 1;
|
||||
}
|
||||
//}
|
||||
// else
|
||||
// {ban=1;}
|
||||
if (ban == 1) {
|
||||
r.rep = ExArray.copyArray(playerRoom.rep);
|
||||
r.p = ExArray.copyArray(playerRoom.p);
|
||||
}
|
||||
if (ban == 1 && playerRoom.turn[2] > 0) {
|
||||
var o_gameinfo = 0;
|
||||
|
||||
acount_lose_deal();
|
||||
|
||||
if (playerRoom.save == 1)//记录小局结算数据
|
||||
{
|
||||
playerRoom.save = 0;
|
||||
var turn = playerRoom.turn[1];
|
||||
|
||||
playerRoom.down_jing_s[turn] = ExArray.copyArray(playerRoom.down_jing);
|
||||
playerRoom.doscore_s[turn] = ExArray.copyArray(playerRoom.doscore);
|
||||
playerRoom.upscore_s[turn] = ExArray.copyArray(playerRoom.upscore);
|
||||
playerRoom.smscore_s[turn] = ExArray.copyArray(playerRoom.sm2score);
|
||||
playerRoom.bmscore_s[turn] = ExArray.copyArray(playerRoom.bmscore);
|
||||
playerRoom.soscore_s[turn] = ExArray.copyArray(playerRoom.soscore);
|
||||
playerRoom.do_card_s[turn] = ExArray.copyArray(playerRoom.do_card);
|
||||
playerRoom.up_card_s[turn] = ExArray.copyArray(playerRoom.up_card);
|
||||
playerRoom.sm_card_s[turn] = ExArray.copyArray(playerRoom.sm_card);
|
||||
playerRoom.sm2_card_s[turn] = ExArray.copyArray(playerRoom.sm2_card);
|
||||
playerRoom.bm_card_s[turn] =ExArray.copyArray(playerRoom.bm_card);
|
||||
playerRoom.so_card_s[turn] = ExArray.copyArray(playerRoom.so_card);
|
||||
playerRoom.last_up_jing_s[turn] = ExArray.copyArray(playerRoom.last_up_jing);
|
||||
playerRoom.last_down_jing_s[turn] = ExArray.copyArray(playerRoom.last_down_jing);
|
||||
playerRoom.gang_score_s[turn] = ExArray.copyArray(playerRoom.gang_score);
|
||||
playerRoom.huscore_s[turn] = ExArray.copyArray(playerRoom.huscore);
|
||||
playerRoom.alldownscore_s[turn] = ExArray.copyArray(mod_jxmj.jxUtil.get_king_score(playerRoom, "all_down"));
|
||||
|
||||
playerRoom.identity_s[turn] = ExArray.copyArray(playerRoom.identity);
|
||||
playerRoom.hand_s[turn] = ExArray.copyArray(playerRoom.hand);
|
||||
playerRoom.hand_arrow_s[turn] = ExArray.copyArray(playerRoom.hand_arrow);
|
||||
playerRoom.hu_note_s[turn] = ExArray.copyArray(playerRoom.hu_note);
|
||||
playerRoom.hu_note_gang_s[turn] = ExArray.copyArray(playerRoom.hu_note_gang);
|
||||
playerRoom.buyHorse_s[turn] = ExArray.copyArray(playerRoom.buyHorse);
|
||||
playerRoom.winHorse_s[turn] = ExArray.copyArray(playerRoom.winHorse);
|
||||
playerRoom.Horse_vic_def_s[turn] = ExArray.copyArray(playerRoom.Horse_vic_def);
|
||||
playerRoom.final_hu_s[turn] = ExArray.copyArray(playerRoom.final_hu);
|
||||
playerRoom.many_hu_s[turn] = ExArray.copyArray(playerRoom.many_hu);
|
||||
playerRoom.jing_s[turn] = ExArray.copyArray(playerRoom.jing);
|
||||
playerRoom.start_hu_s[turn] = [];//ExArray.copyArray(playerRoom.start_hu);
|
||||
playerRoom.sea_hua_s[turn] = [];//ExArray.copyArray(playerRoom.sea_hua);
|
||||
playerRoom.peng_chi_num_s[turn] = [];//ExArray.copyArray(playerRoom.peng_chi_num);
|
||||
playerRoom.hu_note_gang_jing_s[turn] = [];//ExArray.copyArray(playerRoom.hu_note_gang_jing);
|
||||
playerRoom.putJing_s[turn] = [];//ExArray.copyArray(playerRoom.putJing);
|
||||
playerRoom.piao = [];//ExArray.copyArray(playerRoom.piao);
|
||||
playerRoom.jing_reduce_s[turn] = [];//ExArray.copyArray(playerRoom.jing_reduce);
|
||||
playerRoom.nm_hua_pai_s = ExArray.copyArray(playerRoom.hua_hua);
|
||||
if (turn == 11 || turn < 11 && playerRoom.turn[1] + 1 == playerRoom.turn[2]) {
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
if (playerRoom.robot[i] == -1) {
|
||||
o_room.seatlist[i].gameinfo.isbet = 1;
|
||||
if (o_room.seatlist[i] && o_room.seatlist[i].gameinfo.isbet == 1 && i < person) {
|
||||
mod_jxmj.app.youle_room.export.finish_gametask(o_room.o_game.o_agent.agentid, o_room.seatlist[i], "1iyuKXRouftbkpghjabeZ7O0LMgsG7v8", 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
if (playerRoom.robot[i] == -1) {
|
||||
o_room.seatlist[i].gameinfo.isbet = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (freeroomflag == 0) {
|
||||
o_room.o_desk.flow.save_pack_curraset();
|
||||
mod_jxmj.app.youle_room.export.backup_room(o_room, playerRoom);
|
||||
}
|
||||
if (turn > 0 && playerRoom.roomtype[4] != 3 || playerRoom.final_hu[0] > -1 && playerRoom.roomtype[4] != 3) {
|
||||
mod_jxmj.app.youle_room.export.deduct_roomcard(o_room);
|
||||
}
|
||||
|
||||
var hu_seat = playerRoom.final_hu[0];
|
||||
console.log("各家胡的次数=" + hu_seat)
|
||||
if (hu_seat != 4) {
|
||||
playerRoom.hu_sum[hu_seat] += 1;
|
||||
}//各家胡的次数
|
||||
mod_jxmj.count=mod_jxmj.count || 0;
|
||||
if(mod_jxmj.count<99999999)
|
||||
{mod_jxmj.count+=1;}
|
||||
if (mod_jxmj.count) {localStorage.setItem(mod_jxmj.route+"_count", JSON.stringify(mod_jxmj.count));}
|
||||
}
|
||||
if (freeroomflag == 1 || playerRoom.turn[1] + 1 == playerRoom.turn[2]) {
|
||||
if (playerRoom.roomtype[4] == 3) {
|
||||
if (turn > 0 || playerRoom.final_hu[0] > -1) {
|
||||
mod_jxmj.app.youle_room.export.deduct_roomcard(o_room);
|
||||
}
|
||||
}
|
||||
var arr_grade=mod_jxmj.get_arr_grade(o_room,playerRoom);
|
||||
var nowCount = turn + 1;
|
||||
//处理再茶水费后金币成负数
|
||||
// var tea_cost=mod_jxmj.owner_beanpush(playerRoom.roomtype)|| 0;
|
||||
// for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
// if (o_room.seatlist[i]) {
|
||||
// if(o_room.seatlist[i].bean+arr_grade[i]<tea_cost)
|
||||
// {arr_grade[i]+=tea_cost-(o_room.seatlist[i].bean+arr_grade[i]);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
mod_jxmj.app.youle_room.export.save_grade_aset(o_room, arr_grade, nowCount); //保存输赢星星
|
||||
if (arr_grade != undefined) {
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
o_room.seatlist[i].gameinfo.grade = arr_grade[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
o_gameinfo = {};//保存战绩:保存所有结算数据
|
||||
o_gameinfo.page0 = [];
|
||||
o_gameinfo.page0[0] = o_room.makewartime;
|
||||
o_gameinfo.page0[1] = o_room.roomcode;
|
||||
o_gameinfo.name = [];
|
||||
o_gameinfo.score = [];
|
||||
o_gameinfo.avatar = [];
|
||||
o_gameinfo.id = [];
|
||||
o_gameinfo.sex = [];
|
||||
var ban = 0;
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i] && i < person) {
|
||||
var name = o_room.seatlist[i].nickname || "";
|
||||
o_gameinfo.name[i] = mod_jxmj.getBLen(name);
|
||||
o_gameinfo.score[i] = playerRoom.user_point[i] || 0;
|
||||
o_gameinfo.avatar[i] = o_room.seatlist[i].avatar || "";
|
||||
o_gameinfo.id[i] = o_room.seatlist[i].playerid || "";
|
||||
o_gameinfo.sex[i] = o_room.seatlist[i].sex || "";
|
||||
// o_gameinfo.playerlist[i] = [];
|
||||
// o_gameinfo.playerlist[i][0] = o_room.seatlist[i].nickname;
|
||||
// o_gameinfo.playerlist[i][1] = playerRoom.user_point[i] || 0;
|
||||
// o_gameinfo.playerlist[i][2] = o_room.seatlist[i].avatar;
|
||||
|
||||
o_room.seatlist[i].gameinfo.grade = o_room.seatlist[i].gameinfo.grade || 0;
|
||||
//o_room.seatlist[i].gameinfo.grade+=o_gameinfo.score[i];
|
||||
|
||||
if (playerRoom.user_point[i] != 0) {
|
||||
ban = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
var turn = playerRoom.turn[1];
|
||||
if (ban == 0 && turn == 0 && playerRoom.final_hu[0] == -1) {
|
||||
}
|
||||
else {
|
||||
//for (var i=0; i<o_room.seatlist.length; i++)
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.robot[i] == -1) {
|
||||
o_room.seatlist[i].gameinfo.isbet = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
o_gameinfo.roomtype = ExArray.copyArray(playerRoom.roomtype);
|
||||
o_gameinfo.turn_point = ExArray.copyArray(playerRoom.turn_point);
|
||||
o_gameinfo.identity_s = ExArray.copyArray(playerRoom.identity_s);
|
||||
o_gameinfo.hand_s = ExArray.copyArray(playerRoom.hand_s);
|
||||
o_gameinfo1 = {};
|
||||
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i] && i < person) {
|
||||
// o_gameinfo1.playerlist[i] = [];
|
||||
// o_gameinfo1.playerlist[i][0] = o_room.seatlist[i].nickname;
|
||||
// o_gameinfo1.playerlist[i][1] = playerRoom.user_point[i] || 0;
|
||||
// o_gameinfo1.playerlist[i][2] = o_room.seatlist[i].avatar;
|
||||
}
|
||||
}
|
||||
|
||||
o_gameinfo.hand_arrow_s = ExArray.copyArray(playerRoom.hand_arrow_s);
|
||||
o_gameinfo.hu_note_s = ExArray.copyArray(playerRoom.hu_note_s);
|
||||
o_gameinfo.hu_note_gang_s = ExArray.copyArray(playerRoom.hu_note_gang_s);
|
||||
o_gameinfo1.buyHorse_s = ExArray.copyArray(playerRoom.buyHorse_s);
|
||||
o_gameinfo1.winHorse_s = ExArray.copyArray(playerRoom.winHorse_s);
|
||||
o_gameinfo1.Horse_vic_def_s = ExArray.copyArray(playerRoom.Horse_vic_def_s);
|
||||
o_gameinfo1.final_hu_s = ExArray.copyArray(playerRoom.final_hu_s);
|
||||
o_gameinfo1.many_hu_s = ExArray.copyArray(playerRoom.many_hu_s);
|
||||
o_gameinfo1.jing_s = ExArray.copyArray(playerRoom.jing_s);
|
||||
|
||||
o_gameinfo1.down_jing_s = ExArray.copyArray(playerRoom.down_jing_s);
|
||||
o_gameinfo1.doscore_s = ExArray.copyArray(playerRoom.doscore_s);
|
||||
o_gameinfo1.upscore_s = ExArray.copyArray(playerRoom.upscore_s);
|
||||
o_gameinfo1.smscore_s = ExArray.copyArray(playerRoom.smscore_s);
|
||||
o_gameinfo1.bmscore_s = ExArray.copyArray(playerRoom.bmscore_s);
|
||||
o_gameinfo1.soscore_s = ExArray.copyArray(playerRoom.soscore_s);
|
||||
o_gameinfo1.do_card_s=ExArray.copyArray(playerRoom.do_card_s);
|
||||
o_gameinfo1.up_card_s=ExArray.copyArray(playerRoom.up_card_s);
|
||||
o_gameinfo1.sm_card_s=ExArray.copyArray(playerRoom.sm_card_s);
|
||||
o_gameinfo1.sm2_card_s=ExArray.copyArray(playerRoom.sm2_card_s);
|
||||
o_gameinfo1.bm_card_s=ExArray.copyArray(playerRoom.bm_card_s);
|
||||
o_gameinfo1.so_card_s=ExArray.copyArray(playerRoom.so_card_s);
|
||||
o_gameinfo1.last_up_jing_s = ExArray.copyArray(playerRoom.last_up_jing_s);
|
||||
o_gameinfo1.last_down_jing_s = ExArray.copyArray(playerRoom.last_down_jing_s);
|
||||
o_gameinfo1.gang_score_s = ExArray.copyArray(playerRoom.gang_score_s);
|
||||
o_gameinfo1.huscore_s = ExArray.copyArray(playerRoom.huscore_s);
|
||||
o_gameinfo1.alldownscore_s = ExArray.copyArray(playerRoom.alldownscore_s);
|
||||
|
||||
o_gameinfo.start_hu_s = ExArray.copyArray(playerRoom.start_hu_s);
|
||||
o_gameinfo.sea_hua_s = ExArray.copyArray(playerRoom.sea_hua_s);
|
||||
o_gameinfo.peng_chi_num_s = ExArray.copyArray(playerRoom.peng_chi_num_s);
|
||||
o_gameinfo.hu_note_gang_jing_s = ExArray.copyArray(playerRoom.hu_note_gang_jing_s);
|
||||
o_gameinfo.putJing_s = ExArray.copyArray(playerRoom.putJing_s);
|
||||
o_gameinfo.piao = ExArray.copyArray(playerRoom.piao);
|
||||
//o_gameinfo.jing_reduce_s=ExArray.copyArray(playerRoom.jing_reduce_s);
|
||||
o_gameinfo.nm_hua_pai_s = ExArray.copyArray(playerRoom.nm_hua_pai_s);
|
||||
r.statis = ExArray.copyArray(playerRoom.statis);
|
||||
var hasvalue=playerRoom.user_point.some(function (v,i,s) {
|
||||
return v>0;
|
||||
});
|
||||
if (turn==0&&playerRoom.final_hu[0]==-1){
|
||||
o_gameinfo=o_gameinfo1=false;
|
||||
}
|
||||
if (freeroomflag == 1) {
|
||||
mod_jxmj.app.youle_room.export.save_grade(o_room, o_gameinfo, o_gameinfo1, 0);
|
||||
}
|
||||
else {
|
||||
mod_jxmj.app.youle_room.export.save_grade(o_room, o_gameinfo, o_gameinfo1, 1);
|
||||
}
|
||||
freeroomflag = 1;
|
||||
}
|
||||
if (freeroomflag == 1) {
|
||||
clearTimeout(playerRoom.mopai_timer[0]);
|
||||
clearTimeout(playerRoom.mopai_timer[2]);
|
||||
playerRoom.mopai_timer[0]=-1;
|
||||
playerRoom.mopai_timer[2]=-1;
|
||||
for (var j = 0; j < playerRoom.robot_count.length; j++) {
|
||||
if (playerRoom.robot_count[j]<0){
|
||||
playerRoom.robot_count[j]=0;
|
||||
}
|
||||
}
|
||||
clearInterval(playerRoom.timer[0]);
|
||||
clearInterval(playerRoom.timer[1]);
|
||||
clearInterval(playerRoom.timer[2]);
|
||||
playerRoom.timer[0]=-1;
|
||||
playerRoom.timer[1]=-1;
|
||||
playerRoom.timer[2]=-1;
|
||||
playerRoom.offline_timer[0] = clearInterval(playerRoom.offline_timer[0]);
|
||||
playerRoom.offline_timer[1] = clearInterval(playerRoom.offline_timer[1]);
|
||||
playerRoom.offline_timer[0] = -1;
|
||||
playerRoom.offline_timer[1] = -1;
|
||||
clearTimeout(playerRoom.ready_timer[0]);
|
||||
clearTimeout(playerRoom.ready_timer[1]);
|
||||
clearTimeout(playerRoom.ready_timer[2]);
|
||||
clearTimeout(playerRoom.ready_timer[3]);
|
||||
playerRoom.ready_timer[0] = -1;
|
||||
playerRoom.ready_timer[1] = -1;
|
||||
playerRoom.ready_timer[2] = -1;
|
||||
playerRoom.ready_timer[3] = -1;
|
||||
clearInterval(playerRoom.offline_alltimer);
|
||||
playerRoom.offline_alltimer=-1;
|
||||
playerRoom = {};
|
||||
playerRoom = null;
|
||||
mod_jxmj[roomcode] = {};
|
||||
mod_jxmj[roomcode] = null;
|
||||
delete mod_jxmj[roomcode];
|
||||
mod_jxmj.Storage_clear(roomcode, o_room);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
|
||||
function acount_lose_deal() {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var len = playerRoom.turn_point.length;
|
||||
for (let i = 0; i < person; i++) {
|
||||
if(playerRoom.robot[i]==-1){
|
||||
playerRoom.gold_account_lose[i].total++;
|
||||
if(!!playerRoom.turn_point[len-1]) {
|
||||
if(playerRoom.turn_point[len-1][i]<0) {
|
||||
playerRoom.gold_account_lose[i].lose++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
mod_jxmj.get_beanfloor = function (roomtype, game_config) {
|
||||
if (roomtype[14] == 1) {
|
||||
if (roomtype[21] > 0 && roomtype[22] > 0) {
|
||||
return roomtype[22];
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
if (roomtype[14] == 2) {
|
||||
return roomtype[16][2];
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
mod_jxmj.get_arr_grade = function (o_room,playerRoom) {
|
||||
var arr_grade = ExArray.copyArray(playerRoom.user_point), win_grade = 0, win_rate_all = 0, sum = 0;
|
||||
var beishu=playerRoom.roomtype[21]||1;
|
||||
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
|
||||
arr_grade[i] = playerRoom.user_point[i]*beishu;
|
||||
if (arr_grade[i] < 0 && o_room.seatlist[i].bean + arr_grade[i] < 0) {
|
||||
arr_grade[i] = -o_room.seatlist[i].bean;
|
||||
}
|
||||
if (arr_grade[i] < 0) {
|
||||
win_grade = win_grade - arr_grade[i];
|
||||
}
|
||||
if (playerRoom.user_point[i] > 0) {
|
||||
win_rate_all += playerRoom.user_point[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
if (playerRoom.user_point[i] > 0) {
|
||||
arr_grade[i] = parseInt(win_grade * playerRoom.user_point[i] / win_rate_all);
|
||||
}
|
||||
}
|
||||
}
|
||||
var new_arr_grade = [];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
sum += arr_grade[i];
|
||||
new_arr_grade[i] = [arr_grade[i], i];
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
arr_grade[i] = new_arr_grade[i][0];
|
||||
}
|
||||
}
|
||||
return arr_grade;
|
||||
}
|
||||
1396
codes/games/server/games/jinxian_mj/flow/net_operate.js
Normal file
1396
codes/games/server/games/jinxian_mj/flow/net_operate.js
Normal file
File diff suppressed because it is too large
Load Diff
2054
codes/games/server/games/jinxian_mj/flow/net_put_card.js
Normal file
2054
codes/games/server/games/jinxian_mj/flow/net_put_card.js
Normal file
File diff suppressed because it is too large
Load Diff
445
codes/games/server/games/jinxian_mj/flow/net_ready.js
Normal file
445
codes/games/server/games/jinxian_mj/flow/net_ready.js
Normal file
@@ -0,0 +1,445 @@
|
||||
//下一局准备,再次初始化各项数据
|
||||
|
||||
|
||||
mod_jxmj.ready = function (pack, o_room) {
|
||||
try {
|
||||
var agentid = pack.data.agentid;
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
//console.log(agentid);console.log(gameid);console.log(roomcode);console.log(seat);console.log(playerid);console.log(pack.conmode);console.log(pack.fromid);
|
||||
//robot
|
||||
var o_room = o_room || mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, pack.data.seat, pack.data.playerid, pack.conmode, pack.fromid);
|
||||
//console.log("mod_jxmj.ready");console.log(o_room);
|
||||
var result = mod_jxmj.robot_ready(o_room, pack, playerRoom);//console.log(pack.data.ready+"robot_ready="+result);
|
||||
if (result == 0) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
pack = result;
|
||||
}
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, pack.data.seat, pack.data.playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room || !o_room.makewartime) {
|
||||
return;
|
||||
}
|
||||
seat = parseInt(pack.data.seat);
|
||||
if (o_room.seatlist[seat].gameinfo.isprepare == 1&&playerRoom.robot[seat]==1){
|
||||
return;
|
||||
}
|
||||
if (playerRoom.kick_seat[seat]==1){
|
||||
return;
|
||||
}
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
//msg.seat =pack.data.seat;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "start";
|
||||
msg.makewartime = o_room.makewartime;
|
||||
msg.data = {};
|
||||
|
||||
msg.data.readyseat = playerRoom.whoready;
|
||||
msg.data.sieves_num = playerRoom.sieves_num;
|
||||
msg.data.sieves = playerRoom.sieve_get;
|
||||
msg.data.baoting = playerRoom.baoting;
|
||||
msg.data.robot =playerRoom.robot;
|
||||
|
||||
msg.roomcode = roomcode;
|
||||
if (playerRoom.turn[1] == playerRoom.turn[2] && playerRoom.turn[2] > 0) {
|
||||
clearInterval(playerRoom.timer[0]);
|
||||
clearInterval(playerRoom.timer[1]);
|
||||
clearInterval(playerRoom.timer[2]);
|
||||
clearTimeout(playerRoom.timer[3]);
|
||||
playerRoom.timer[0]=-1;
|
||||
playerRoom.timer[1]=-1;
|
||||
playerRoom.timer[2]=-1;
|
||||
playerRoom.timer[3]=-1;
|
||||
playerRoom = {};
|
||||
return;
|
||||
}
|
||||
if (playerRoom.status != 0 && playerRoom.status != 3 && playerRoom.user_ctrl[4 + seat] == 1) {
|
||||
return;
|
||||
}
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
playerRoom.user_ctrl[4 + seat] = 1;
|
||||
|
||||
var ban = 0;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.user_ctrl[4 + i] == 0) {
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ban == 1){
|
||||
msg.data.readyseat = undefined;
|
||||
msg.data.sieves_num = undefined;
|
||||
msg.data.sieves = undefined;
|
||||
msg.data.baoting = undefined;
|
||||
msg.data.robot = undefined;
|
||||
}
|
||||
if (ban == 0) {//结算
|
||||
if (playerRoom.status > 0) {
|
||||
playerRoom.turn[1] += 1;
|
||||
}
|
||||
|
||||
o_room.o_desk.data.asetlist.push({"turn": playerRoom.turn[1]});
|
||||
playerRoom.asetlist = ExArray.copyArray(o_room.o_desk.data.asetlist);
|
||||
|
||||
playerRoom.persons = playerRoom.persons || [];
|
||||
playerRoom.persons[0] = playerRoom.persons[0] || o_room.method.get_playercount();//玩家數量
|
||||
|
||||
if (playerRoom.turn[1] < playerRoom.turn[2] && playerRoom.turn[2] > 0) {
|
||||
mod_jxmj.restart(playerRoom, o_room);
|
||||
if (!playerRoom.status) {
|
||||
mod_jxmj.deal_Pai(playerRoom, o_room);
|
||||
mod_jxmj.set_time(playerRoom);
|
||||
// for (var i = 0; i < person; i++) {
|
||||
// o_room.seatlist[i].gameinfo.isprepare = 0;
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
else {//console.log(playerRoom.user_ctrl);
|
||||
//pack.data.ready=0;
|
||||
msg.user_ctrl = ExArray.copyArray(playerRoom.user_ctrl);
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
o_room.seatlist[seat].gameinfo.isbet = 0;
|
||||
return;
|
||||
}
|
||||
var send_start_hu = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.start_hu_card[i][0] > 0) {
|
||||
send_start_hu = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
msg.identity = ExArray.copyArray(playerRoom.identity);
|
||||
playerRoom.user_ctrl[11] = new Date().getTime();
|
||||
msg.user_ctrl = ExArray.copyArray(playerRoom.user_ctrl);
|
||||
for (var i = 0; i < person; i++) {
|
||||
o_room.seatlist[i].gameinfo.isprepare = 1;
|
||||
o_room.seatlist[i].gameinfo.isbet = 1;
|
||||
msg.user_ctrl[4 + i] = 1;
|
||||
}
|
||||
msg.status = playerRoom.status;
|
||||
msg.user_point = ExArray.copyArray(playerRoom.user_point);//各用户累积分数
|
||||
msg.turn_point = ExArray.copyArray(playerRoom.turn_point);
|
||||
msg.buyHorse = ExArray.copyArray(playerRoom.buyHorse);//各家买马
|
||||
msg.winHorse = ExArray.copyArray(playerRoom.winHorse);//各家买马
|
||||
//msg.Horse_vic_def=ExArray.copyArray(playerRoom.Horse_vic_def);//各家买马
|
||||
msg.turn = playerRoom.turn[1];
|
||||
//msg.act_piao=ExArray.copyArray(playerRoom.act_piao);
|
||||
msg.sieve = ExArray.copyArray(playerRoom.sieve);
|
||||
msg.lastbar = ExArray.copyArray(playerRoom.lastbar);
|
||||
msg.sea = ExArray.copyArray(playerRoom.sea);
|
||||
msg.sea_hua = ExArray.copyArray(playerRoom.sea_hua);
|
||||
msg.throw_card = playerRoom.throw_card;
|
||||
msg.hu_card = ExArray.copyArray(playerRoom.hu_card);
|
||||
//msg.act=playerRoom.act;
|
||||
msg.ag = ExArray.copyArray(playerRoom.ag);
|
||||
msg.last_operate = ExArray.copyArray(playerRoom.last_operate);
|
||||
msg.ting_status = ExArray.copyArray(playerRoom.ting_status);
|
||||
msg.start_hu = ExArray.copyArray(playerRoom.start_hu);
|
||||
msg.final_hu = ExArray.copyArray(playerRoom.final_hu);
|
||||
if (send_start_hu == 1) {
|
||||
msg.act = ExArray.copyArray(playerRoom.act);
|
||||
}
|
||||
msg.jing = ExArray.copyArray(playerRoom.jing);
|
||||
msg.down_jing = ExArray.copyArray(playerRoom.down_jing);//LOL
|
||||
msg.huapai = ExArray.copyArray(playerRoom.hua_hua);
|
||||
// msg.poker=[];
|
||||
// for(var i=0;i<playerRoom.poker.length;i++)
|
||||
// {
|
||||
// if(playerRoom.poker[i]!=-1)
|
||||
// {msg.poker[i]=0;}
|
||||
// else
|
||||
// {msg.poker[i]=-1;}
|
||||
// }
|
||||
// var pos1=playerRoom.user_ctrl[8];//牌墙首牌位置
|
||||
// msg.poker[pos1]=-1;
|
||||
msg.pai_num = mod_jxmj.get_remain_card(playerRoom);
|
||||
if (playerRoom.status == 1) {
|
||||
playerRoom.rep_num[0] += 1;
|
||||
var l = playerRoom.rep_num[0];
|
||||
playerRoom.rep[l] = ExArray.copyArray(playerRoom.hand);
|
||||
msg.rep_num = ExArray.copyArray(playerRoom.rep_num);
|
||||
}
|
||||
playerRoom.person_info =[];
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]){
|
||||
var msg_info={}
|
||||
msg_info.avatar=o_room.seatlist[i].avatar;
|
||||
msg_info.nickname=o_room.seatlist[i].nickname;
|
||||
msg_info.playerid=o_room.seatlist[i].playerid;
|
||||
msg_info.bean=o_room.seatlist[i].bean;
|
||||
msg_info.new_one=playerRoom.new_one[i];
|
||||
playerRoom.person_info[i]=msg_info;
|
||||
}
|
||||
}
|
||||
msg.person_info=playerRoom.person_info;
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i]) {
|
||||
msg.conmode = o_room.seatlist[i].conmode;
|
||||
msg.fromid = o_room.seatlist[i].fromid;
|
||||
msg.hua_shoupai = ExArray.copyArray(playerRoom.hua_shoupai[i]);
|
||||
msg.hua_begin = ExArray.copyArray(playerRoom.hua_beginshoupai[i]);
|
||||
msg.hand = mod_jxmj.ini_msg_hand(playerRoom);
|
||||
msg.hand[i] = ExArray.copyArray(playerRoom.hand[i]);
|
||||
if (send_start_hu == 1) {
|
||||
for (var j = 0; j < person; j++) {
|
||||
if (j != i) {
|
||||
var start_hu_card = ExArray.copyArray(playerRoom.start_hu_card[j]);
|
||||
for (var k = 0; k < playerRoom.hand[j][0].length; k++) {
|
||||
var pos = start_hu_card.indexOf(playerRoom.hand[j][0][k]);
|
||||
if (pos != -1) {
|
||||
msg.hand[j][0][k] = playerRoom.hand[j][0][k];
|
||||
start_hu_card[pos] = -1;
|
||||
}
|
||||
}
|
||||
ExArray.ordArray(msg.hand[j][0]);
|
||||
}
|
||||
if (j == i) {
|
||||
var start_hu_card = ExArray.copyArray(playerRoom.start_hu_card[j]);
|
||||
if (start_hu_card.length > 0) {
|
||||
msg.start_hu_card = [];
|
||||
msg.start_hu_card[j] = ExArray.copyArray(start_hu_card);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playerRoom.user_ctrl[2] != i) {
|
||||
msg.user_ctrl[3] = -1;
|
||||
if (playerRoom.user_ctrl[3] > 0) {
|
||||
msg.user_ctrl[3] = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
msg.user_ctrl[3] = playerRoom.user_ctrl[3];
|
||||
}
|
||||
msg.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
msg.user_eat_bump[i] = ExArray.copyArray(playerRoom.user_eat_bump[i]);
|
||||
if (playerRoom.robot[i] == -1) {
|
||||
youle_room.app.SendPack(msg);
|
||||
}
|
||||
ExArray.ordArray(playerRoom.hand[seat][0]);
|
||||
}
|
||||
}
|
||||
mod_jxmj.Storage(playerRoom);
|
||||
if (playerRoom.robot[seat] == -1) {
|
||||
var o_desk = o_room.o_desk;
|
||||
//保存收包
|
||||
o_desk.flow.save_receivepack(pack, seat, playerid);
|
||||
|
||||
//保存发包
|
||||
o_desk.flow.save_sendpack(msg, seat, playerid);
|
||||
}
|
||||
//offline
|
||||
var off = -1;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.offline[i] > 0) {
|
||||
off = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (off > -1&&((o_room.infinite && o_room.infinite == 1)||playerRoom.config.offline_robot)) {
|
||||
playerRoom.offline_timer[0] = setInterval(mod_jxmj.put, 1900, pack, o_room,1);
|
||||
playerRoom.offline_timer[1] = setInterval(mod_jxmj.operate,2000, pack, o_room,1);
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.offline[i]==1){
|
||||
playerRoom.offline_anytime[i]=15;
|
||||
}
|
||||
}
|
||||
// playerRoom.offline_timer[2]=setInterval(mod_jxmj.ready,12000,pack, o_room);
|
||||
// clearInterval(playerRoom.offline_timer[2]);
|
||||
// clearInterval(playerRoom.offline_timer[3]);
|
||||
//playerRoom.timer[3]=setTimeout(mod_jxmj.start_ready,3000,pack,roomcode,o_room);
|
||||
}
|
||||
//robot
|
||||
var robot = -1;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.robot[i] > -1) {
|
||||
robot = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (robot > -1) {
|
||||
var pack1 = {
|
||||
"data":
|
||||
{
|
||||
"agentid": pack.data.agentid,
|
||||
"gameid": pack.data.gameid,
|
||||
"roomcode": pack.data.roomcode,
|
||||
"playerid": o_room.seatlist[seat].playerid,
|
||||
"seat": pack.data.seat,
|
||||
"put_pos": 0,
|
||||
}
|
||||
}
|
||||
playerRoom.timer[0] = setInterval(mod_jxmj.put, 1600, pack, o_room);
|
||||
var pack2 = {
|
||||
"data":
|
||||
{
|
||||
"agentid": pack.data.agentid,
|
||||
"gameid": pack.data.gameid,
|
||||
"roomcode": pack.data.roomcode,
|
||||
"playerid": o_room.seatlist[seat].playerid,
|
||||
"seat": pack.data.seat,
|
||||
"operate": [6, 0, 0],
|
||||
}
|
||||
}
|
||||
|
||||
playerRoom.timer[1] = setInterval(mod_jxmj.operate, 1800, pack, o_room);
|
||||
//playerRoom.timer[2]=setInterval(mod_jxmj.ready,12000,pack);
|
||||
clearInterval(playerRoom.timer[2]);
|
||||
clearInterval(playerRoom.timer[3]);
|
||||
playerRoom.timer[2]=-1;
|
||||
playerRoom.timer[3]=-1;
|
||||
//playerRoom.timer[3]=setTimeout(mod_jxmj.start_ready,3000,pack,roomcode,o_room);
|
||||
for (var i = 0; i < 4; i++) {
|
||||
clearTimeout(playerRoom.kick_timer[i]);//清空踢人计时器
|
||||
playerRoom.kick_timer[i]=-1;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
mod_jxmj.start_ready = function (pack, roomcode, o_room) {
|
||||
pack.data.ready = 0;
|
||||
var ran = parseInt(Math.random() * 3) + 1;
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
playerRoom.timer[2] = setInterval(mod_jxmj.ready, ran * 3000, pack, o_room);
|
||||
if (playerRoom.roomtype[14] == 3 || playerRoom.roomtype[14] == 4){
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (!o_room.seatlist[i].isrobot) {
|
||||
var send = ExArray.copyArray(pack);
|
||||
send.data.ready = 1;
|
||||
send.data.seat = i;
|
||||
send.data.playerid = o_room.seatlist[i].playerid;
|
||||
send.conmode = o_room.seatlist[i].conmode;
|
||||
send.fromid = o_room.seatlist[i].fromid;
|
||||
send.aaa = 111;
|
||||
setTimeout(mod_jxmj.ready, ran * 2000 + 12, send, o_room);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mod_jxmj.robot_ready = function (o_room, pack, playerRoom) {
|
||||
if (!playerRoom) {
|
||||
return 0;
|
||||
}
|
||||
if (o_room && !o_room.infinite) {//不是无限局直接返回
|
||||
return pack;
|
||||
}
|
||||
var robot = -1;//console.log("robot_ready2222222222222");console.log(o_room);
|
||||
var ban = 0;
|
||||
if (!playerRoom) {
|
||||
return 0;
|
||||
}
|
||||
if (playerRoom.status == 2 || playerRoom.status == 1) {
|
||||
return 0;
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.user_ctrl[4 + i] == 0) {
|
||||
ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ban == 1 && playerRoom.final_hu[0] != -1 || ban == 1 && (playerRoom.status==0||playerRoom.status==3)) {
|
||||
var ran=[];
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
for(var jj=0;jj<person;jj++)
|
||||
{
|
||||
ran[jj]=jj;
|
||||
}
|
||||
ran=ExArray.randomArray(ran);
|
||||
for(var j=0;j<person;j++)
|
||||
{var i=ran[j];
|
||||
if(playerRoom.robot[i]>-1 && playerRoom.user_ctrl[4 + i] == 0)
|
||||
{robot=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//console.log("robot1="+robot+","+pack.data.ready)
|
||||
if (playerRoom.status > 1 && playerRoom.status < 3) {
|
||||
robot = -1;
|
||||
}
|
||||
if (robot > -1) {
|
||||
if (playerRoom.user_ctrl[4 + robot] == 1) {
|
||||
return 0;
|
||||
}
|
||||
else if (!pack.data.ready) {
|
||||
seat = robot;
|
||||
pack.data.seat = seat;
|
||||
playerid = o_room.seatlist[seat].playerid;
|
||||
pack.data.playerid = playerid;
|
||||
pack.conmode = o_room.seatlist[seat].conmode;
|
||||
pack.fromid = o_room.seatlist[seat].fromid;
|
||||
//console.log("robot2="+robot+","+pack.data.ready)
|
||||
var beanfloor = mod_jxmj.get_beanfloor(o_room.roomtype) || 0;
|
||||
// for (var i = 0; i < o_room.seatlist.length; i++)
|
||||
// {
|
||||
// if(o_room.seatlist[i].bean<beanfloor || o_room.seatlist[i].bean<=0)
|
||||
// {setTimeout(mod_jxmj.kickout3,5*1000,o_room, i);
|
||||
// clearTimeout(playerRoom.kick_timer[i]);//清空踢人计时器
|
||||
// playerRoom.robot[i]=0;
|
||||
// return 0;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
else if (!pack.data.ready) {
|
||||
return 0;
|
||||
}
|
||||
return pack;
|
||||
}
|
||||
|
||||
//开始准备,在客户端加一个按钮
|
||||
mod_jxmj.war_ready = 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 playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room) {
|
||||
return;
|
||||
}
|
||||
if (playerRoom.status > 0 && playerRoom.status < 3) {
|
||||
return;
|
||||
}
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[o_room.roomtype[6]] || 4;
|
||||
playerRoom.whoready[seat] = 1;//
|
||||
playerRoom.user_ctrl[4 + seat] = 1;
|
||||
var ban = 1;
|
||||
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.whoready[i] == 0) {
|
||||
ban = 0;
|
||||
}
|
||||
}
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
//msg.seat =pack.data.seat;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "startwar";
|
||||
msg.seat = seat;
|
||||
msg.data = {
|
||||
'readyseat': playerRoom.whoready,
|
||||
"start": ban,
|
||||
};
|
||||
msg.roomcode = roomcode;
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
}
|
||||
|
||||
536
codes/games/server/games/jinxian_mj/flow/net_start_game.js
Normal file
536
codes/games/server/games/jinxian_mj/flow/net_start_game.js
Normal file
@@ -0,0 +1,536 @@
|
||||
//开始游戏时,客户端会发个开战包给服务器,这里处理这个包
|
||||
//要做的事情:1、初始化,如果在第3步已经初始化了(mod_jxmj.makewar这个函数里初始化),则不需要再次初始化;
|
||||
//2、回包给客户端:把已经初始化好的数据发给客户端,包括给各个用户的牌,各种状态,客户端会根据数据绘画界面
|
||||
mod_jxmj.starta = function (pack) {
|
||||
try {
|
||||
var agentid = pack.data.agentid;
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room || !o_room.makewartime) {
|
||||
return;
|
||||
}
|
||||
console.log(o_room);
|
||||
//console.log(pack);
|
||||
if (o_room.match_data) {//比赛场
|
||||
} else {//非比赛场
|
||||
}
|
||||
if (!mod_jxmj.read_over) {
|
||||
return;
|
||||
}
|
||||
if (pack.data.send && pack.data.send != 1 && !playerRoom) {
|
||||
return;
|
||||
}
|
||||
//o_room.method.get_playercount();
|
||||
var msg = {};
|
||||
msg.makewartime = o_room.makewartime;
|
||||
msg.data = {};
|
||||
//调用
|
||||
var msg_ex = mod_jxmj.start(pack);
|
||||
// 合并对象
|
||||
msg = extend(msg, msg_ex);
|
||||
//LOL
|
||||
//判断无限局是否开始了
|
||||
msg.data.readyseat = playerRoom.whoready;
|
||||
|
||||
msg.data.sieves_num = playerRoom.sieves_num;
|
||||
msg.data.sieves = playerRoom.sieve_get;
|
||||
msg.data.baoting = playerRoom.baoting;
|
||||
msg.data.robot = playerRoom.robot;
|
||||
|
||||
if (playerRoom.status==3||playerRoom.status==0){
|
||||
msg.data.sieves_num = undefined;
|
||||
msg.data.sieves = undefined;
|
||||
msg.data.baoting = undefined;
|
||||
}
|
||||
msg.data.smile_score =ExArray.copyArray( playerRoom.smile_score);;//回头一笑
|
||||
msg.data.smile2_score = ExArray.copyArray( playerRoom.smile2_score);//回头一笑
|
||||
msg.data.down_score = ExArray.copyArray( playerRoom.down_score);//上下翻
|
||||
//if (playerRoom.config.bmob == 1) {
|
||||
msg.data.bmob_score = ExArray.copyArray(playerRoom.bmob_score);
|
||||
// }
|
||||
//if (playerRoom.config.just_a_song == 1) {
|
||||
msg.data.song_score = ExArray.copyArray(playerRoom.song_score);
|
||||
// }
|
||||
msg.data.up_score = ExArray.copyArray(playerRoom.up_score);
|
||||
msg.data.last_up_jing = ExArray.copyArray(playerRoom.last_up_jing);
|
||||
msg.data.last_down_jing = ExArray.copyArray(playerRoom.last_down_jing);
|
||||
msg.data.huscore = ExArray.copyArray(playerRoom.huscore);
|
||||
msg.data.downscore = ExArray.copyArray(mod_jxmj.jxUtil.get_king_score(playerRoom, "all_down"));
|
||||
msg.data.upscore = ExArray.copyArray(mod_jxmj.jxUtil.get_king_score(playerRoom, "up"));
|
||||
msg.data.smile = ExArray.copyArray(mod_jxmj.jxUtil.get_king_score(playerRoom, "smile"));
|
||||
msg.data.smilescore = ExArray.copyArray(mod_jxmj.jxUtil.get_king_score(playerRoom, "smile2"));
|
||||
msg.data.bmobscore = ExArray.copyArray(mod_jxmj.jxUtil.get_king_score(playerRoom, "bmob"));
|
||||
msg.data.songscore = ExArray.copyArray(mod_jxmj.jxUtil.get_king_score(playerRoom, "song_all"));
|
||||
msg.data.gangscore = ExArray.copyArray(playerRoom.gang_score);
|
||||
|
||||
msg.person_info=playerRoom.person_info;
|
||||
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
|
||||
if(pack.data.send && pack.data.send == 2) {
|
||||
for(var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if(o_room.seatlist[i]&&o_room.seatlist[i].onstate == 0) {
|
||||
playerRoom.offline[i] = 0;
|
||||
playerRoom.offline_anytime[i]=0;
|
||||
}
|
||||
}
|
||||
//var online_seat = playerRoom.offline.indexOf(1);
|
||||
//if(online_seat == -1) {
|
||||
playerRoom.offline_timer[0] = clearInterval(playerRoom.offline_timer[0]);
|
||||
playerRoom.offline_timer[1] = clearInterval(playerRoom.offline_timer[1]);
|
||||
playerRoom.offline_timer[0] = -1;
|
||||
playerRoom.offline_timer[1] = -1;
|
||||
|
||||
// playerRoom.offline_timer[2]=clearInterval(playerRoom.offline_timer[2]);
|
||||
// }
|
||||
playerRoom.offlinetime=0;
|
||||
}
|
||||
if (pack.data.send && (pack.data.send == 2||pack.data.send == 3)){
|
||||
|
||||
playerRoom.user_ctrl[10] += 1;//控制权是否有变动
|
||||
mod_jxmj.set_time(playerRoom);
|
||||
|
||||
clearTimeout(playerRoom.mopai_timer[0]);
|
||||
// clearTimeout(playerRoom.mopai_timer[1]);
|
||||
clearTimeout(playerRoom.mopai_timer[2]);
|
||||
// clearTimeout(playerRoom.mopai_timer[3]);
|
||||
playerRoom.mopai_timer[0]=-1;
|
||||
// playerRoom.mopai_timer[1]=-1;
|
||||
playerRoom.mopai_timer[2]=-1;
|
||||
for (var j = 0; j < playerRoom.robot_count.length; j++) {
|
||||
if (playerRoom.robot_count[j]<0){
|
||||
playerRoom.robot_count[j]=0;
|
||||
}
|
||||
}
|
||||
// playerRoom.mopai_timer[3]=-1;
|
||||
// playerRoom.mopai_time =0;
|
||||
//msg.data.up_score=undefined;
|
||||
//msg.data.bmob_score = undefined;
|
||||
//msg.data.song_score = undefined;
|
||||
}
|
||||
var send_start_hu = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.start_hu_card[i][0] > 0) {
|
||||
send_start_hu = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pack.data.send) {
|
||||
if (o_room.seatlist[seat] && seat < person) {
|
||||
var msg_ex = mod_jxmj.start_send_one(playerRoom, pack, seat, person, send_start_hu);
|
||||
msg = extend(msg, msg_ex);
|
||||
if (playerRoom.robot[seat] == -1) {
|
||||
youle_room.app.SendPack(msg);
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i] && i < person) {
|
||||
var package;
|
||||
package = {};
|
||||
package.conmode = o_room.seatlist[i].conmode;
|
||||
package.fromid = o_room.seatlist[i].fromid;
|
||||
package.app = msg.app;
|
||||
package.route = msg.route;
|
||||
package.rpc = msg.rpc;
|
||||
package.data = {};
|
||||
package.roomcode = msg.roomcode;
|
||||
package.roomtype = ExArray.copyArray(o_room.roomtype);
|
||||
var user_ctrl = ExArray.copyArray(playerRoom.user_ctrl);
|
||||
if (playerRoom.user_ctrl[2] != i) {
|
||||
user_ctrl[3] = -1;
|
||||
if (playerRoom.user_ctrl[3] > 0) {
|
||||
user_ctrl[3] = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
user_ctrl[3] = playerRoom.user_ctrl[3];
|
||||
}
|
||||
//开展
|
||||
if (pack.data.send==1){
|
||||
package.user_ctrl=ExArray.copyArray(user_ctrl);
|
||||
}
|
||||
// package.user_ctrl=ExArray.copyArray(user_ctrl);为了重连其他玩家不发生时间重置,注释这一句
|
||||
youle_room.app.SendPack(package);
|
||||
}
|
||||
}
|
||||
}
|
||||
ExArray.ordArray(playerRoom.hand[seat][0]);
|
||||
playerRoom.start_player[seat] = 1;//定时器相关
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (var i = 0; i < o_room.seatlist.length; i++) {
|
||||
if (o_room.seatlist[i] && i < person) {
|
||||
msg.conmode = o_room.seatlist[i].conmode;
|
||||
msg.fromid = o_room.seatlist[i].fromid;
|
||||
var msg_ex = mod_jxmj.start_send_all(playerRoom, pack, seat, i, person, send_start_hu);
|
||||
msg = extend(msg, msg_ex);
|
||||
if (playerRoom.robot[i] == -1) {
|
||||
youle_room.app.SendPack(msg);
|
||||
}
|
||||
ExArray.ordArray(playerRoom.hand[seat][0]);
|
||||
playerRoom.start_player[seat] = 1;//定时器相关
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
playerRoom.act_piao = [-1, -1, 0, [-1], -1];
|
||||
if (playerRoom.robot[seat] == -1) {
|
||||
var o_desk = o_room.o_desk;
|
||||
//保存收包
|
||||
o_desk.flow.save_receivepack(pack, seat, playerid);
|
||||
|
||||
//保存发包
|
||||
o_desk.flow.save_sendpack(msg, seat, playerid);
|
||||
|
||||
mod_jxmj.Storage(playerRoom);
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "agree";
|
||||
msg.data = {};
|
||||
msg.agree = playerRoom.agree;
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
}
|
||||
var sended_person = 0;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.start_player[i] > 0) {
|
||||
sended_person += 1;
|
||||
}
|
||||
}
|
||||
if (sended_person == person && !playerRoom.timer[0]) {//if重连 跳过
|
||||
var pack1 = {
|
||||
"data":
|
||||
{
|
||||
"agentid": pack.data.agentid,
|
||||
"gameid": pack.data.gameid,
|
||||
"roomcode": pack.data.roomcode,
|
||||
"playerid": o_room.seatlist[seat].playerid,
|
||||
"seat": pack.data.seat,
|
||||
"put_pos": 0,
|
||||
}
|
||||
}
|
||||
|
||||
var pack2 = {
|
||||
"data":
|
||||
{
|
||||
"agentid": pack.data.agentid,
|
||||
"gameid": pack.data.gameid,
|
||||
"roomcode": pack.data.roomcode,
|
||||
"playerid": o_room.seatlist[seat].playerid,
|
||||
"seat": pack.data.seat,
|
||||
"operate": [6, 0, 0],
|
||||
}
|
||||
}
|
||||
// playerRoom.timer[0] = setInterval(mod_jxmj.put, 1000, pack, o_room);
|
||||
// playerRoom.timer[1] = setInterval(mod_jxmj.operate, 1200, pack, o_room);
|
||||
//playerRoom.timer[2] = setInterval(mod_jxmj.ready, 1200, pack, o_room);
|
||||
}
|
||||
if(playerRoom.status==3 && playerRoom.user_ctrl[4+seat]==0 && playerRoom.roomtype[14]>=3)
|
||||
{playerRoom.timer[3] = setTimeout(mod_jxmj.start_ready, 10, pack, roomcode, o_room);
|
||||
}
|
||||
//mod_jxmj.app.SendPack(JSON.stringify(msg));
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
//开始游戏时,客户端会发个开战包给服务器,这里处理这个包
|
||||
//要做的事情:1、初始化,如果在第3步已经初始化了(mod_jxmj.makewar这个函数里初始化),则不需要再次初始化;
|
||||
//2、回包给客户端:把已经初始化好的数据发给客户端,包括给各个用户的牌,各种状态,客户端会根据数据绘画界面
|
||||
//KO(相應start操作,是遊戲開始,重連等的入口)
|
||||
mod_jxmj.start = function (pack) {
|
||||
try {
|
||||
//檢測包的有效性
|
||||
var agentid = pack.data.agentid;
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room || !o_room.makewartime) {
|
||||
return;
|
||||
}
|
||||
//是否是比賽場
|
||||
if (o_room.match_data) {//比赛场
|
||||
} else {//非比赛场
|
||||
}
|
||||
//沒有準備結束標識的話退出
|
||||
if (!mod_jxmj.read_over) {
|
||||
return;
|
||||
}
|
||||
//包額發送模式不為1時並且房間未曾初始化時退出
|
||||
if (pack.data.send && pack.data.send != 1 && !playerRoom) {//console.log("pack.data.send != 1");
|
||||
return;
|
||||
}
|
||||
//o_room.method.get_playercount();
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
//msg.seat =pack.data.seat;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "start";
|
||||
msg.data = {};
|
||||
msg.roomcode = roomcode;
|
||||
//console.log(seat+"start111"+JOSN.stringify(msg));
|
||||
//房間變量內存初始化
|
||||
mod_jxmj.ini(playerRoom, o_room);
|
||||
if (playerRoom.status && playerRoom.status == -1) {//准备阶段 初始为0,不是-1
|
||||
//遊戲未開始
|
||||
//判斷是否遊戲結束了
|
||||
if (playerRoom.turn[1] == playerRoom.turn[2] && playerRoom.turn[2] > 0) {
|
||||
playerRoom = {};
|
||||
}
|
||||
}
|
||||
else {
|
||||
//遊戲開始
|
||||
playerRoom.persons = playerRoom.persons || [];
|
||||
playerRoom.persons[0] = playerRoom.persons[0] || o_room.method.get_playercount();//玩家數量
|
||||
//status===0时
|
||||
if (!playerRoom.status && pack.data.send && pack.data.send == 1) {
|
||||
//就是房間未初始化的情況
|
||||
//过程操作:分牌,摸牌,判断起手胡,自摸杠
|
||||
mod_jxmj.deal_Pai(playerRoom, o_room);////发牌处理,当每次开始一个小局时执行,每小局只执行1次
|
||||
mod_jxmj.set_time(playerRoom);////计时器,每次用户操作后,服务器会记录这个操作的时间(设置控制权是否变动的参照)
|
||||
// mod_jxmj.app.youle_room.export.backup_room(o_room, {"test": 1});//房间备份
|
||||
}
|
||||
}
|
||||
var send_start_hu = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.start_hu_card[i][0] > 0) {//起手胡的牌
|
||||
send_start_hu = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//人數
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
//所有遊戲數據副本
|
||||
msg.playerids = ExArray.copyArray(playerRoom.playerids);//本小局用户id
|
||||
msg.piao = ExArray.copyArray(playerRoom.piao);
|
||||
msg.act_piao = ExArray.copyArray(playerRoom.act_piao);
|
||||
msg.roomtype = ExArray.copyArray(playerRoom.roomtype);
|
||||
msg.wartime = o_room.createtime;//createtime
|
||||
msg.makewartime = o_room.makewartime;
|
||||
msg.identity = ExArray.copyArray(playerRoom.identity);
|
||||
playerRoom.user_ctrl[11] = new Date().getTime();
|
||||
msg.status = playerRoom.status;
|
||||
msg.hand_arrow = ExArray.copyArray(playerRoom.hand_arrow);
|
||||
msg.user_point = ExArray.copyArray(playerRoom.user_point);//各用户累积分数
|
||||
msg.turn_point = ExArray.copyArray(playerRoom.turn_point);
|
||||
//LOL
|
||||
msg.data.baoting = ExArray.copyArray(playerRoom.baoting);
|
||||
|
||||
if (o_room.infinite && o_room.infinite == 1) {
|
||||
msg.grade = [];
|
||||
for (var j = 0; j < o_room.seatlist.length; j++) {
|
||||
if (o_room.seatlist[j]) {
|
||||
msg.grade[j] = o_room.seatlist[j].bean;
|
||||
}
|
||||
}
|
||||
}
|
||||
msg.buyHorse = ExArray.copyArray(playerRoom.buyHorse);//各家买马
|
||||
msg.winHorse = ExArray.copyArray(playerRoom.winHorse);//各家买马
|
||||
//msg.Horse_vic_def=ExArray.copyArray(playerRoom.Horse_vic_def);//各家买马
|
||||
msg.turn = playerRoom.turn[1];
|
||||
msg.sieve = ExArray.copyArray(playerRoom.sieve);
|
||||
msg.lastbar = ExArray.copyArray(playerRoom.lastbar);
|
||||
msg.sea = ExArray.copyArray(playerRoom.sea);
|
||||
msg.sea_hua = ExArray.copyArray(playerRoom.sea_hua);
|
||||
msg.throw_card = playerRoom.throw_card;
|
||||
msg.hu_card = ExArray.copyArray(playerRoom.hu_card);
|
||||
//msg.act=playerRoom.act;
|
||||
if (playerRoom.final_hu[0] != -1) {
|
||||
msg.ag = ExArray.copyArray(playerRoom.ag);
|
||||
msg.tail_poker_hu = ExArray.copyArray(playerRoom.tail_poker_hu);
|
||||
msg.jing_reduce = ExArray.copyArray(playerRoom.jing_reduce);
|
||||
}
|
||||
msg.put_tail_poker = ExArray.copyArray(playerRoom.put_tail_poker);
|
||||
msg.last_operate = ExArray.copyArray(playerRoom.last_operate);
|
||||
msg.ting_status = ExArray.copyArray(playerRoom.ting_status);
|
||||
msg.start_hu = ExArray.copyArray(playerRoom.start_hu);
|
||||
msg.final_hu = ExArray.copyArray(playerRoom.final_hu);
|
||||
msg.many_hu = ExArray.copyArray(playerRoom.many_hu);
|
||||
if (send_start_hu == 1) {
|
||||
msg.act = ExArray.copyArray(playerRoom.act);
|
||||
}
|
||||
msg.hu_ready = ExArray.copyArray(playerRoom.hu_ready);
|
||||
msg.hu_note = ExArray.copyArray(playerRoom.hu_note);
|
||||
msg.hu_note_gang = ExArray.copyArray(playerRoom.hu_note_gang);
|
||||
msg.hu_note_gang_jing = ExArray.copyArray(playerRoom.hu_note_gang_jing);
|
||||
msg.an_gang_num = ExArray.copyArray(playerRoom.an_gang_num);
|
||||
msg.putJing = ExArray.copyArray(playerRoom.putJing);
|
||||
|
||||
msg.jing = ExArray.copyArray(playerRoom.jing);
|
||||
msg.down_jing = ExArray.copyArray(playerRoom.down_jing);//LOL
|
||||
|
||||
msg.huapai = ExArray.copyArray(playerRoom.hua_hua);
|
||||
|
||||
msg.hua_huadan = ExArray.copyArray(playerRoom.hua_huadan);
|
||||
msg.hua_shoupaidan = ExArray.copyArray(playerRoom.hua_shoupaidan);
|
||||
msg.pai_num = mod_jxmj.get_remain_card(playerRoom);
|
||||
//只相應一個人的請求
|
||||
if (pack.data.send && seat == 0) {
|
||||
playerRoom.rep_num[0] += 1;
|
||||
var l = playerRoom.rep_num[0];
|
||||
playerRoom.rep[l] = ExArray.copyArray(playerRoom.hand);
|
||||
if (playerRoom.user_ctrl[3] > 0) {
|
||||
playerRoom.p[l] = playerRoom.user_ctrl[3];
|
||||
}
|
||||
}
|
||||
//沒有send
|
||||
if (!pack.data.send && playerRoom.final_hu[0] == -1) {
|
||||
playerRoom.rep_num[0] += 1;
|
||||
var l = playerRoom.rep_num[0];
|
||||
playerRoom.rep[l] = ExArray.copyArray(playerRoom.hand);
|
||||
if (playerRoom.user_ctrl[3] > 0) {
|
||||
playerRoom.p[l] = playerRoom.user_ctrl[3];
|
||||
}
|
||||
}
|
||||
msg.rep_num = ExArray.copyArray(playerRoom.rep_num);//重放相關
|
||||
//有人胡了
|
||||
if (playerRoom.final_hu[0] > -1) {
|
||||
msg.rep = ExArray.copyArray(playerRoom.rep);
|
||||
msg.p = ExArray.copyArray(playerRoom.p);
|
||||
}
|
||||
if (playerRoom.turn[1] + 1 == playerRoom.turn[2]) {
|
||||
msg.statis = ExArray.copyArray(playerRoom.statis);
|
||||
}
|
||||
return msg;
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
//KO(把牌加密發送給一個人,判斷有沒有人胡,同時如果操作權輪到自己則將發牌傳遞否則去掉發牌)
|
||||
mod_jxmj.start_send_one = function (playerRoom, pack, seat, person, send_start_hu) {
|
||||
var msg = {};
|
||||
//沒人胡
|
||||
if (playerRoom.final_hu[0] == -1) {
|
||||
////所有牌加密
|
||||
msg.hand = mod_jxmj.ini_msg_hand(playerRoom);
|
||||
msg.hua_shoupai = ExArray.copyArray(playerRoom.hua_shoupai[seat]);
|
||||
msg.hua_begin = ExArray.copyArray(playerRoom.hua_beginshoupai[seat]);
|
||||
//自己的牌
|
||||
msg.hand[seat] = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
//可以起手胡,進行處理
|
||||
if (send_start_hu == 1) {
|
||||
for (var j = 0; j < 4; j++) {
|
||||
if (j != seat) {
|
||||
var start_hu_card = ExArray.copyArray(playerRoom.start_hu_card[j]);
|
||||
for (var k = 0; k < playerRoom.hand[j][0].length; k++) {
|
||||
var pos = start_hu_card.indexOf(playerRoom.hand[j][0][k]);
|
||||
if (pos != -1) {
|
||||
msg.hand[j][0][k] = playerRoom.hand[j][0][k];
|
||||
start_hu_card[pos] = -1;
|
||||
}
|
||||
}
|
||||
ExArray.ordArray(msg.hand[j][0]);
|
||||
}
|
||||
if (j == seat) {
|
||||
var start_hu_card = ExArray.copyArray(playerRoom.start_hu_card[j]);
|
||||
if (start_hu_card.length > 0) {
|
||||
msg.start_hu_card = [];
|
||||
msg.start_hu_card[j] = ExArray.copyArray(start_hu_card);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
//有人胡
|
||||
msg.hand = ExArray.copyArray(playerRoom.hand);
|
||||
}
|
||||
//处理拿随机牌
|
||||
//if(playerRoom.tail_poker[2]>0)
|
||||
{
|
||||
var gang_player_pos = playerRoom.last_operate[2];//上次操作
|
||||
if (playerRoom.tail_poker[7] == 0)//补张
|
||||
{
|
||||
msg.tail_poker = ExArray.copyArray(playerRoom.tail_poker);
|
||||
}
|
||||
else if (playerRoom.tail_poker[7] == 1)//杠
|
||||
{
|
||||
msg.tail_poker = ExArray.copyArray(playerRoom.tail_poker);
|
||||
}
|
||||
}
|
||||
msg.user_ctrl = ExArray.copyArray(playerRoom.user_ctrl);//用戶控制參數
|
||||
//如果不是輪到本人,那麼啊發的牌去掉
|
||||
if (playerRoom.user_ctrl[2] != seat) {
|
||||
msg.user_ctrl[3] = -1;
|
||||
if (playerRoom.user_ctrl[3] > 0) {
|
||||
msg.user_ctrl[3] = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
//加上發牌
|
||||
msg.user_ctrl[3] = playerRoom.user_ctrl[3];
|
||||
}
|
||||
msg.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
msg.user_eat_bump[seat] = ExArray.copyArray(playerRoom.user_eat_bump[seat]);
|
||||
return msg;
|
||||
}
|
||||
//KO(把牌加密發送給所有人,別的魚上相同)
|
||||
mod_jxmj.start_send_all = function (playerRoom, pack, seat, i, person, send_start_hu) {
|
||||
var msg = {};
|
||||
if (playerRoom.final_hu[0] == -1) {
|
||||
msg.hand = mod_jxmj.ini_msg_hand(playerRoom);
|
||||
msg.hand[i] = ExArray.copyArray(playerRoom.hand[i]);
|
||||
if (send_start_hu == 1) {
|
||||
for (var j = 0; j < person; j++) {
|
||||
if (j != i) {
|
||||
var start_hu_card = ExArray.copyArray(playerRoom.start_hu_card[j]);
|
||||
for (var k = 0; k < playerRoom.hand[j][0].length; k++) {
|
||||
var pos = start_hu_card.indexOf(playerRoom.hand[j][0][k]);
|
||||
if (pos != -1) {
|
||||
msg.hand[j][0][k] = playerRoom.hand[j][0][k];
|
||||
start_hu_card[pos] = -1;
|
||||
}
|
||||
}
|
||||
ExArray.ordArray(msg.hand[j][0]);
|
||||
}
|
||||
if (j == i) {
|
||||
var start_hu_card = ExArray.copyArray(playerRoom.start_hu_card[j]);
|
||||
if (start_hu_card.length > 0) {
|
||||
msg.start_hu_card = [];
|
||||
msg.start_hu_card[j] = ExArray.copyArray(start_hu_card);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
msg.hand = ExArray.copyArray(playerRoom.hand);
|
||||
}
|
||||
//处理拿随机牌
|
||||
//if(playerRoom.tail_poker[2]>0)
|
||||
{
|
||||
var gang_player_pos = playerRoom.last_operate[2];
|
||||
if (playerRoom.tail_poker[7] == 0)//补张
|
||||
{
|
||||
msg.tail_poker = ExArray.copyArray(playerRoom.tail_poker);
|
||||
}
|
||||
else if (playerRoom.tail_poker[7] == 1)//杠
|
||||
{
|
||||
msg.tail_poker = ExArray.copyArray(playerRoom.tail_poker);
|
||||
}
|
||||
}
|
||||
msg.user_ctrl = ExArray.copyArray(playerRoom.user_ctrl);
|
||||
if (playerRoom.user_ctrl[2] != i) {
|
||||
msg.user_ctrl[3] = -1;
|
||||
if (playerRoom.user_ctrl[3] > 0) {
|
||||
msg.user_ctrl[3] = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
msg.user_ctrl[3] = playerRoom.user_ctrl[3];
|
||||
}
|
||||
msg.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
msg.user_eat_bump[i] = ExArray.copyArray(playerRoom.user_eat_bump[i]);
|
||||
return msg;
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
//游戏开始前的玩法
|
||||
//这里是游戏时选择倍数 底分的操作
|
||||
|
||||
mod_jxmj.piao = function (pack) {
|
||||
try {
|
||||
var agentid = pack.data.agentid;
|
||||
var playerid = parseInt(pack.data.playerid);
|
||||
var gameid = pack.data.gameid;
|
||||
var roomcode = parseInt(pack.data.roomcode);
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
var seat = parseInt(pack.data.seat);
|
||||
var o_room = mod_jxmj.app.youle_room.export.check_player(agentid, gameid, roomcode, seat, playerid, pack.conmode, pack.fromid);
|
||||
if (!o_room) {
|
||||
return;
|
||||
}
|
||||
if (pack.data.piao != undefined) {
|
||||
var piao = pack.data.piao;
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
if (piao < 5) {
|
||||
playerRoom.piao[seat] = piao + 1;
|
||||
}
|
||||
else {
|
||||
playerRoom.piao[seat] = 0;
|
||||
}
|
||||
if (playerRoom.piao.indexOf(-1) == -1) {
|
||||
playerRoom.status = 2;
|
||||
// for(var i=0;i<person;i++)
|
||||
// {playerRoom.roomtype[9]=playerRoom.roomtype[9]+playerRoom.piao[i]*2;}
|
||||
// var jings=mod_jxmj.set_poker_wall0(roomcode);
|
||||
// var l=jings.length;
|
||||
// var jing0=parseInt(Math.random()*l);
|
||||
// var jing1=jing0+1;
|
||||
// if(jing1==10)
|
||||
// {jing1=1;}
|
||||
// if(jing1==20)
|
||||
// {jing1=11;}
|
||||
// if(jing1==30)
|
||||
// {jing1=21;}
|
||||
// if(jing1==35)
|
||||
// {jing1=31;}
|
||||
// if(jing1==44)
|
||||
// {jing1=41;}
|
||||
// playerRoom.jing=[jing0,jing1];
|
||||
}
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
playerRoom.act_piao = [playerRoom.piao[seat], seat, 1, [0], seat];
|
||||
var msg = {};
|
||||
msg.conmode = pack.conmode;
|
||||
msg.fromid = pack.fromid;
|
||||
msg.app = "youle";
|
||||
msg.route = mod_jxmj.route;
|
||||
msg.rpc = "start";
|
||||
msg.data = {};
|
||||
msg.piao = ExArray.copyArray(playerRoom.piao);
|
||||
msg.status = playerRoom.status;
|
||||
msg.act_piao = ExArray.copyArray(playerRoom.act_piao);
|
||||
if (playerRoom.status == 2) {
|
||||
msg.user_eat_bump = ExArray.copyArray(playerRoom.user_eat_bump);
|
||||
msg.roomtype = ExArray.copyArray(playerRoom.roomtype);
|
||||
}
|
||||
o_room.method.sendpack_toother(msg, -1);
|
||||
playerRoom.act_piao = [-1, -1, 0, [-1], -1];
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
BIN
codes/games/server/games/jinxian_mj/flow/下局准备流程net_ready.pdf
Normal file
BIN
codes/games/server/games/jinxian_mj/flow/下局准备流程net_ready.pdf
Normal file
Binary file not shown.
BIN
codes/games/server/games/jinxian_mj/flow/出牌流程net_put_card.pdf
Normal file
BIN
codes/games/server/games/jinxian_mj/flow/出牌流程net_put_card.pdf
Normal file
Binary file not shown.
BIN
codes/games/server/games/jinxian_mj/flow/处理操作流程net_operate.pdf
Normal file
BIN
codes/games/server/games/jinxian_mj/flow/处理操作流程net_operate.pdf
Normal file
Binary file not shown.
BIN
codes/games/server/games/jinxian_mj/flow/收发包流程相关函数列表1.xlsx
Normal file
BIN
codes/games/server/games/jinxian_mj/flow/收发包流程相关函数列表1.xlsx
Normal file
Binary file not shown.
8
codes/games/server/games/jinxian_mj/flow/流程模块.txt
Normal file
8
codes/games/server/games/jinxian_mj/flow/流程模块.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
flow_deal_card发牌流程
|
||||
net_start_game开始游戏的发包流程
|
||||
net_start_play_way游戏开始前的玩法
|
||||
net_put_card出牌操作
|
||||
net_operate碰杠胡操作
|
||||
method_operate处理碰杠胡操作(第1步)
|
||||
method_save小局结算保存数据
|
||||
net_ready下一局准备
|
||||
Binary file not shown.
1136
codes/games/server/games/jinxian_mj/import/do_point.js
Normal file
1136
codes/games/server/games/jinxian_mj/import/do_point.js
Normal file
File diff suppressed because it is too large
Load Diff
236
codes/games/server/games/jinxian_mj/import/imp_base.js
Normal file
236
codes/games/server/games/jinxian_mj/import/imp_base.js
Normal file
@@ -0,0 +1,236 @@
|
||||
//计时器,每次用户操作后,服务器会记录这个操作的时间
|
||||
mod_jxmj.set_time = function (playerRoom) {
|
||||
var t = new Date();
|
||||
if (playerRoom.user_ctrl[12] == -1 || playerRoom.user_ctrl[12] != playerRoom.user_ctrl[10]) {
|
||||
playerRoom.user_ctrl[0] = t.getTime();
|
||||
playerRoom.user_ctrl[12] = playerRoom.user_ctrl[10];
|
||||
}
|
||||
}
|
||||
//截取昵称合适的长度
|
||||
mod_jxmj.getBLen = function (str) {
|
||||
var len = 0;
|
||||
var l = 0;
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
var c = str.charCodeAt(i);
|
||||
if (len <= 16 - 1 && (c >= 0 && c <= 128)) {
|
||||
len++;
|
||||
l++;
|
||||
}
|
||||
else if (len <= 16 - 2) {
|
||||
len += 2;
|
||||
l++;
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
str = str.slice(0, l);
|
||||
return str;
|
||||
}
|
||||
mod_jxmj.sort_result = function (arr1, arr2) {
|
||||
return arr2[1] - arr1[1];
|
||||
}
|
||||
//排序牌
|
||||
mod_jxmj.ords = function (arr) {
|
||||
if (arr != undefined && arr.length > 0) {
|
||||
arr.sort(function f(a, b) {
|
||||
return a[0] - b[0];
|
||||
});
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
mod_jxmj.ords_un = function (arr) {
|
||||
if (arr != undefined && arr.length > 0) {
|
||||
arr.sort(function f(a, b) {
|
||||
return a[1] - b[1];
|
||||
});
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
|
||||
//牌中是否有癞子
|
||||
mod_jxmj.b.have_jing = function (arrs, playerRoom, card) {
|
||||
var jing_num = 0;
|
||||
card = card || 0;
|
||||
var l = arrs[0].length;
|
||||
for (var i = 0; i < l; i++) {
|
||||
var pos = playerRoom.jing.indexOf(arrs[0][i]);
|
||||
if (pos != -1) {
|
||||
jing_num += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (card > 0 && playerRoom.jing.indexOf(card) != -1) {
|
||||
jing_num += 1;
|
||||
}
|
||||
// jing_num -= playerRoom.jing_reduce;
|
||||
return jing_num;
|
||||
}
|
||||
mod_jxmj.b.have_jing1 = function (arrs, playerRoom, card) {
|
||||
var jing_num = 0;
|
||||
card = card || 0;
|
||||
var jing = playerRoom.jing[1];
|
||||
for (var i = 0; i < arrs.length; i++) {
|
||||
if (arrs[i] == jing) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//KO(四个癞子[a,a+1,b,b+1])
|
||||
//随机癞子,
|
||||
mod_jxmj.b.random_jing = function (pokers, playerRoom, pos1) {
|
||||
var pker = [];
|
||||
//副本,不是发出的牌,不是第一张牌
|
||||
for (var i = 0; i < pokers.length; i++) {
|
||||
if (pokers[i] > 0 && i != pos1) {
|
||||
pker[pker.length] = pokers[i];
|
||||
}
|
||||
}
|
||||
//随机癞子--
|
||||
var l = pker.length;
|
||||
var jing_pos = parseInt(Math.random() * l);
|
||||
var jing0 = pker[jing_pos];
|
||||
playerRoom.jing[0] = jing0;
|
||||
var jing1 = jing0 + 1;
|
||||
if (jing1 == 10) {
|
||||
jing1 = 1;
|
||||
}
|
||||
else if (jing1 == 20) {
|
||||
jing1 = 11;
|
||||
}
|
||||
else if (jing1 == 30) {
|
||||
jing1 = 21;
|
||||
}
|
||||
else if (jing1 == 35) {
|
||||
jing1 = 31;
|
||||
}
|
||||
else if (jing1 == 44) {
|
||||
jing1 = 41;
|
||||
}
|
||||
playerRoom.jing[1] = jing1;
|
||||
//--
|
||||
//将癞子从副本中剔除,随机第二种癞子
|
||||
pker.splice(jing_pos, 1);
|
||||
var l = pker.length;
|
||||
var jing_pos = parseInt(Math.random() * l);
|
||||
var jing0 = pker[jing_pos];
|
||||
playerRoom.jing[2] = jing0;
|
||||
var jing1 = jing0 + 1;
|
||||
if (jing1 == 10) {
|
||||
jing1 = 1;
|
||||
}
|
||||
else if (jing1 == 20) {
|
||||
jing1 = 11;
|
||||
}
|
||||
else if (jing1 == 30) {
|
||||
jing1 = 21;
|
||||
}
|
||||
else if (jing1 == 35) {
|
||||
jing1 = 31;
|
||||
}
|
||||
else if (jing1 == 44) {
|
||||
jing1 = 41;
|
||||
}
|
||||
playerRoom.jing[3] = jing1;
|
||||
}
|
||||
|
||||
//对自己的手牌重排序
|
||||
mod_jxmj.b.arrange_pai = function (arr, playerRoom) {
|
||||
var arr1 = [];
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
arr1[i] = [i, arr[i], i];
|
||||
}
|
||||
if (playerRoom.jing[1]) {
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
if (arr1[i][1] == playerRoom.jing[0]) {
|
||||
arr1[i][2] = arr1[i][1] - 70;
|
||||
}
|
||||
if (arr1[i][1] == playerRoom.jing[1]) {
|
||||
arr1[i][2] = arr1[i][1] - 60;
|
||||
}
|
||||
}
|
||||
arr1.sort(mod_jxmj.b.sortNumber);
|
||||
}
|
||||
var arr2 = [];
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
arr2[i] = arr1[i][1];
|
||||
}
|
||||
return arr2;
|
||||
}
|
||||
|
||||
//KO(牌排序)
|
||||
//排序牌
|
||||
mod_jxmj.b.arrange_pai2 = function (arr, playerRoom) {
|
||||
var arr1 = [];
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
arr1[i] = [i, arr[i], i];
|
||||
}
|
||||
if (playerRoom.jing[1]) {
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
if (arr1[i][1] == playerRoom.jing[1]) {
|
||||
//如果当前的牌是精的话,代号-60????LOL
|
||||
arr1[i][2] = arr1[i][1] - 60;
|
||||
}
|
||||
}
|
||||
arr1.sort(mod_jxmj.b.sortNumber);
|
||||
}
|
||||
//充足排好序的牌
|
||||
var arr2 = [];
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
arr2[i] = arr1[i][1];
|
||||
}
|
||||
return arr2;
|
||||
}
|
||||
mod_jxmj.b.arrange_pai1 = function (arr, playerRoom) {
|
||||
var arr1 = [];
|
||||
var arr3 = ExArray.copyArray(arr);
|
||||
var l = arr.length;
|
||||
if (playerRoom.jing[1]) {
|
||||
for (var i = 0; i < l; i++) {
|
||||
if (arr3[i] == 43) {
|
||||
arr3[i] = playerRoom.jing[1] + 0.5;
|
||||
}
|
||||
}
|
||||
}
|
||||
ExArray.ordArray(arr3);
|
||||
var l = arr3.length;
|
||||
for (var i = 0; i < l; i++) {
|
||||
if (playerRoom.jing[1] && arr3[i] == playerRoom.jing[1] + 0.5) {
|
||||
arr3[i] = 43;
|
||||
}
|
||||
arr1[i] = [i, arr3[i], i];
|
||||
}
|
||||
if (playerRoom.jing[1]) {
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
if (arr1[i][1] == playerRoom.jing[1]) {
|
||||
//如果当前的牌是精的话,代号-60????LOL
|
||||
arr1[i][2] = arr1[i][1] - 60;
|
||||
}
|
||||
}
|
||||
arr1.sort(mod_jxmj.b.sortNumber);
|
||||
}
|
||||
//充足排好序的牌
|
||||
var arr2 = [];
|
||||
for (var i = 0; i < arr1.length; i++) {
|
||||
arr2[i] = arr1[i][1];
|
||||
}
|
||||
return arr2;
|
||||
}
|
||||
//排序函数
|
||||
mod_jxmj.b.sortNumber = function (a, b) {
|
||||
var r = a[2] - b[2];
|
||||
if (r == 0) {
|
||||
r = a[1] - b[1];
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
// 合并对象
|
||||
function extend(target, source) {
|
||||
for (var obj in source) {
|
||||
target[obj] = source[obj];
|
||||
}
|
||||
return target;
|
||||
}
|
||||
305
codes/games/server/games/jinxian_mj/import/imp_chi_peng_gang.js
Normal file
305
codes/games/server/games/jinxian_mj/import/imp_chi_peng_gang.js
Normal file
@@ -0,0 +1,305 @@
|
||||
//判断吃碰杠
|
||||
mod_jxmj.judge_bar_bump_eat = function (playerRoom, throw_card, seat, mode) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
if (!mode) {
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];
|
||||
}//杠碰吃、自摸杠、胡、听
|
||||
playerRoom.guopai = [0, 0, 0, 0];
|
||||
var throw_card1 = throw_card;
|
||||
var ban = 0;
|
||||
var next_seat = seat + 1;
|
||||
if (next_seat > person - 1) {
|
||||
next_seat = 0;
|
||||
}
|
||||
// if(playerRoom.tail_poker[7]==1)
|
||||
// {
|
||||
// for(var j=0;j<2;j++)
|
||||
// {throw_card1=throw_card[j];
|
||||
// if(throw_card1>0)
|
||||
// {
|
||||
// for(var i=0;i<4;i++)
|
||||
// {
|
||||
// if(i!=seat)
|
||||
// {
|
||||
// var arr=mod_jxmj.bar(playerRoom.hand[i][0],throw_card1);
|
||||
// if(arr && arr.length>0)
|
||||
// {playerRoom.user_eat_bump[i][0]=1;ban=1;
|
||||
// playerRoom.guopai[i]=1;
|
||||
// }
|
||||
//else//允许杠碰同时出现
|
||||
// {var arr=mod_jxmj.bump(playerRoom.hand[i][0],throw_card1);
|
||||
// if(arr && arr.length>0)
|
||||
// {playerRoom.user_eat_bump[i][1]=1;ban=1;
|
||||
// playerRoom.guopai[i]=1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// if(throw_card<30)//判断吃牌
|
||||
// {
|
||||
// var arr=mod_jxmj.eat(playerRoom.hand[next_seat][0],throw_card1);
|
||||
// if(arr && arr.length>0)
|
||||
// {
|
||||
// var pos=playerRoom.guopeng[next_seat].indexOf(throw_card1);
|
||||
// if(pos!=-1)
|
||||
// {}
|
||||
// else
|
||||
// {
|
||||
// playerRoom.user_eat_bump[next_seat][2]=1;ban=1;
|
||||
// playerRoom.guopai[next_seat]=1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
if (throw_card1 < 50) {
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {//判断明杠
|
||||
var arr = mod_jxmj.bar(playerRoom.hand[i][0], throw_card1);
|
||||
if (arr && arr.length > 0) {
|
||||
playerRoom.user_eat_bump[i][0] = 1;
|
||||
ban = 1;
|
||||
playerRoom.guopai[i] = 1;
|
||||
var arr0 = ExArray.copyArray(playerRoom.hand[i][0]);
|
||||
var arrs = ExArray.copyArray(playerRoom.hand[i]);
|
||||
var ting = mod_jxmj.b.ting_allpai(playerRoom, arr0, i, arrs);
|
||||
if (playerRoom.hu_note[2] == -1)//地杠
|
||||
{
|
||||
playerRoom.hu_note[8] = 11;
|
||||
}//准备地杠
|
||||
}
|
||||
//允许杠碰同时出现
|
||||
//判断过手碰
|
||||
var ban1 = 0;
|
||||
var l = 0;
|
||||
if (playerRoom.guopeng[i]) {
|
||||
l = playerRoom.guopeng[i].length;
|
||||
}
|
||||
if (l > 0 && playerRoom.guopeng[i].indexOf(throw_card1) != -1) {
|
||||
ban1 = 1;
|
||||
}
|
||||
if (ban1 == 0)//判断碰
|
||||
{
|
||||
//判断碰的牌型,有则【throw_card1,throw_card1,throw_card1】,没有则【】
|
||||
var arr = mod_jxmj.bump(playerRoom.hand[i][0], throw_card1);
|
||||
if (mod_jxmj.config.jinxian == 1 && playerRoom.wait_pe[i] == 1 && playerRoom.can_pe[i].indexOf(throw_card1) != -1) {
|
||||
arr = [];
|
||||
}
|
||||
if (playerRoom.baoting[i] == 2) {
|
||||
arr = [];
|
||||
}
|
||||
if (arr && arr.length > 0) {
|
||||
playerRoom.user_eat_bump[i][1] = 1;
|
||||
ban = 1;
|
||||
playerRoom.guopai[i] = 1;
|
||||
playerRoom.can_pe[i].push(throw_card1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断吃牌
|
||||
if (mod_jxmj.config.eat == 1) {
|
||||
var arr = mod_jxmj.eat(playerRoom.hand[next_seat][0], throw_card1);
|
||||
if (person==2){
|
||||
//两人不可以吃牌
|
||||
arr = []
|
||||
}
|
||||
if (playerRoom.baoting[next_seat] == 2) {
|
||||
arr = []
|
||||
}
|
||||
if (arr && arr.length > 0) {
|
||||
var pos = playerRoom.guopeng[next_seat].indexOf(throw_card1);
|
||||
if (pos != -1) {
|
||||
}
|
||||
else {
|
||||
playerRoom.user_eat_bump[next_seat][2] = 1;
|
||||
ban = 1;
|
||||
playerRoom.guopai[next_seat] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ban == 0 || throw_card1 >= 50) {//mod_jxmj.a.set_next_card_pos(playerRoom);//牌墙首牌+1
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
if (throw_card1 >= 50) {
|
||||
next_seat = seat;
|
||||
}
|
||||
//mod_jxmj.re_set_poker_wall(playerRoom,playerRoom.hand[next_seat][0],pos,next_seat);//重设牌
|
||||
//robot
|
||||
//console.log("deal_card_to="+playerRoom.poker[pos]);
|
||||
var card_arr = playerRoom.hand[next_seat][0];
|
||||
var arrs = ExArray.copyArray(playerRoom.hand[next_seat]);
|
||||
mod_jxmj.deal_card_to_good(playerRoom, card_arr, pos, arrs,next_seat);
|
||||
|
||||
playerRoom.put_number[next_seat] += 1;
|
||||
//var sea_sumpai=mod_jxmj.get_sea_sumpai(playerRoom);
|
||||
|
||||
|
||||
// var sea_sumpai = mod_jxmj.get_sea_sumpai(playerRoom);
|
||||
// if (playerRoom.robot[next_seat] > -1 && sea_sumpai > person * 6) {
|
||||
// var rad = parseInt(Math.random() * 8);
|
||||
// if (rad == 0) {
|
||||
// console.log("发好牌");
|
||||
// mod_jxmj.set_next_pos_to_hu(playerRoom, person, next_seat);
|
||||
// //console.log("deal_card_to="+JSON.stringify(playerRoom.hand[next_seat])+"/"+playerRoom.poker[pos]);
|
||||
// }
|
||||
// }
|
||||
|
||||
var first_card = playerRoom.poker[pos];
|
||||
|
||||
//判断自摸杠/加杠 暗杠
|
||||
if (playerRoom.tail_poker[7] > -1) {
|
||||
var tail_card1 = playerRoom.tail_poker[3];
|
||||
if (tail_card1 > 0) {
|
||||
mod_jxmj.judge_bar(playerRoom, seat, tail_card1);
|
||||
}
|
||||
var tail_card2 = playerRoom.tail_poker[4];
|
||||
if (tail_card2 > 0) {
|
||||
mod_jxmj.judge_bar(playerRoom, seat, tail_card2);
|
||||
}
|
||||
}
|
||||
else {//判断暗杠/加杠
|
||||
mod_jxmj.judge_bar(playerRoom, next_seat);
|
||||
}
|
||||
//console.log("0judge_bar_bump_eat=" + JSON.stringify(playerRoom.user_eat_bump));
|
||||
playerRoom.user_ctrl[3] = first_card;
|
||||
//允许摸牌
|
||||
var next_seat = playerRoom.user_ctrl[2] + 1;//当前控制权移交下一家
|
||||
if (next_seat > person - 1) {
|
||||
next_seat = 0;
|
||||
}
|
||||
//console.log("throw_card1=" + throw_card1);
|
||||
if (throw_card1 < 50) {
|
||||
playerRoom.user_ctrl[2] = next_seat;
|
||||
}
|
||||
else {
|
||||
}
|
||||
playerRoom.user_ctrl[10] += 1;//控制权是否有变动
|
||||
}
|
||||
else {
|
||||
playerRoom.user_ctrl[3] = -1;//不允许摸牌,须其他家过牌才可摸牌
|
||||
playerRoom.user_ctrl[2] = -1;//当前没有控制权
|
||||
playerRoom.user_ctrl[10] += 1;//控制权是否有变动
|
||||
}
|
||||
return ban;
|
||||
}
|
||||
//KO( 玩家摸牌后的判断)
|
||||
//判断杠
|
||||
mod_jxmj.judge_bar = function (playerRoom, next_seat, first_card) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
if(next_seat<=-1 || next_seat>person-1)
|
||||
{return;}
|
||||
var last_seat = playerRoom.last_operate[2];
|
||||
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
first_card = first_card || 0;
|
||||
var first_card = first_card || playerRoom.poker[pos];
|
||||
//判断自摸杠
|
||||
var arr = ExArray.copyArray(playerRoom.hand[next_seat]);
|
||||
var con = 0;
|
||||
var ting_ban = 0;
|
||||
for (var i = 1; i < arr.length; i++) {
|
||||
if (arr[i].length == 3 && arr[i][0] == arr[i][1] && first_card == arr[i][0]) {
|
||||
playerRoom.user_eat_bump[next_seat][3] = first_card;
|
||||
con = 1;
|
||||
ting_ban = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//console.log("是否允许转手杠0=" + con);
|
||||
if (con == 0) {//是否允许转手杠
|
||||
for (var j = 0; j < arr[0].length; j++) {
|
||||
var gang_card = playerRoom.hand[next_seat][0][j];
|
||||
for (var i = 1; i < arr.length; i++) {
|
||||
if (arr[i].length == 3 && arr[i][0] == arr[i][1] && gang_card == arr[i][0]) {
|
||||
playerRoom.user_eat_bump[next_seat][3] = gang_card;
|
||||
//console.log("是否允许转手杠1=" + next_seat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断暗杠
|
||||
var arr = mod_jxmj.bar(playerRoom.hand[next_seat][0], first_card);
|
||||
var con = 0;
|
||||
if (arr && arr.length > 0) {
|
||||
playerRoom.user_eat_bump[next_seat][4] = first_card;
|
||||
con = 1;
|
||||
ting_ban = 1;
|
||||
}
|
||||
if (con == 0) {
|
||||
var arr1 = ExArray.copyArray(playerRoom.hand[next_seat][0]);
|
||||
ExArray.ordArray(arr1);
|
||||
for (var i = 0; i < arr1.length - 3; i++) {
|
||||
if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2] && arr1[i] == arr1[i + 3]) {
|
||||
playerRoom.user_eat_bump[next_seat][4] = arr1[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// if(ting_ban==1)
|
||||
// {var arr0=ExArray.copyArray(playerRoom.hand[next_seat][0]);
|
||||
// var arrs=ExArray.copyArray(playerRoom.hand[next_seat]);
|
||||
// var ting=mod_jxmj.b.ting_allpai(playerRoom,arr0,next_seat,arrs);
|
||||
// }
|
||||
}
|
||||
//判断暗杠等
|
||||
mod_jxmj.judge_bar_an_gang = function (playerRoom, next_seat) {
|
||||
//判断手牌暗杠
|
||||
var arr1 = ExArray.copyArray(playerRoom.hand[next_seat][0]);
|
||||
ExArray.ordArray(arr1);
|
||||
for (var i = 0; i < arr1.length - 3; i++) {
|
||||
if (arr1[i] == arr1[i + 1] && arr1[i] == arr1[i + 2] && arr1[i] == arr1[i + 3]) {
|
||||
playerRoom.user_eat_bump[next_seat][4] = arr1[i];
|
||||
|
||||
// var arr0=ExArray.copyArray(playerRoom.hand[next_seat][0]);
|
||||
// var arrs=ExArray.copyArray(playerRoom.hand[next_seat]);
|
||||
// var ting=mod_jxmj.b.ting_allpai(playerRoom,arr0,next_seat,arrs);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//是否允许转手杠/加杠
|
||||
var arr = ExArray.copyArray(playerRoom.hand[next_seat]);
|
||||
for (var j = 0; j < arr1.length; j++) {
|
||||
var gang_card = playerRoom.hand[next_seat][0][j];
|
||||
//console.log("转手杠0judge_bar_an_gang=" + gang_card + JSON.stringify(arr));
|
||||
for (var i = 1; i < arr.length; i++) {
|
||||
if (arr[i].length == 3 && arr[i][0] == arr[i][1] && gang_card == arr[i][0]) {
|
||||
playerRoom.user_eat_bump[next_seat][3] = gang_card;
|
||||
//console.log("转手杠1judge_bar_an_gang=" + next_seat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断吃,输出吃的牌型
|
||||
mod_jxmj.eat = function (arr, card) {
|
||||
var arr0 = mod_jxmj.straight3(arr, card);
|
||||
return arr0;
|
||||
}
|
||||
//KO
|
||||
//判断碰,输出碰的牌型
|
||||
mod_jxmj.bump = function (arr, card) {
|
||||
var exist = mod_jxmj.same(arr, card);//几个
|
||||
var arr0 = [];
|
||||
if (exist >= 2) {
|
||||
arr0 = [card, card, card];
|
||||
}
|
||||
// else if(exist==4)
|
||||
// {arr0=[card,card,card,card];}
|
||||
return arr0;
|
||||
}
|
||||
//判断杠,输出杠的牌型
|
||||
mod_jxmj.bar = function (arr, card) {
|
||||
var exist = mod_jxmj.same(arr, card);
|
||||
var arr0 = [];
|
||||
if (exist == 3) {
|
||||
arr0 = [card, card, card, card];
|
||||
}
|
||||
return arr0;
|
||||
}
|
||||
159
codes/games/server/games/jinxian_mj/import/imp_flow.js
Normal file
159
codes/games/server/games/jinxian_mj/import/imp_flow.js
Normal file
@@ -0,0 +1,159 @@
|
||||
//重连流程、解散流程
|
||||
//deskinfo是客户端重连时,服务器发的数据
|
||||
mod_jxmj.getDeskInfo = function (o_room, seat) {
|
||||
var deskinfo = {"test": 1};
|
||||
var roomcode = o_room.roomcode;
|
||||
deskinfo.user_ctrl = ExArray.copyArray(mod_jxmj[roomcode].user_ctrl);
|
||||
deskinfo.final_hu = ExArray.copyArray(mod_jxmj[roomcode].final_hu);
|
||||
deskinfo.status = ExArray.copyArray(mod_jxmj[roomcode].status);
|
||||
deskinfo.roomtype = ExArray.copyArray(mod_jxmj[roomcode].roomtype);
|
||||
deskinfo.playerid=[];
|
||||
for (var j = 0; j < o_room.seatlist.length; j++) {
|
||||
if (o_room.seatlist[j]) {
|
||||
deskinfo.playerid[j] = o_room.seatlist[j].playerid;
|
||||
}
|
||||
}
|
||||
deskinfo.grade=[];
|
||||
if (o_room.infinite && o_room.infinite == 1) {
|
||||
deskinfo.grade = [];
|
||||
for (var j = 0; j < o_room.seatlist.length; j++) {
|
||||
if (o_room.seatlist[j]) {
|
||||
deskinfo.grade[j] = o_room.seatlist[j].bean;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < mod_jxmj[roomcode].person_info.length; i++) {
|
||||
if (mod_jxmj[roomcode].person_info[i]){
|
||||
mod_jxmj[roomcode].person_info[i].new_one=mod_jxmj[roomcode].new_one[i];
|
||||
}
|
||||
}
|
||||
deskinfo.person_info=mod_jxmj[roomcode].person_info;
|
||||
}
|
||||
return deskinfo;
|
||||
};
|
||||
//解散房间,服务器需要发的结算数据及要处理的分数
|
||||
mod_jxmj.disbandRoom = function (o_room) {
|
||||
var o_desk = o_room.o_desk;
|
||||
var r = {r: 1};
|
||||
var roomcode = o_room.roomcode;
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
var rr = {};
|
||||
if (playerRoom) {
|
||||
playerRoom.offline_timer[0] = clearInterval(playerRoom.offline_timer[0]);
|
||||
playerRoom.offline_timer[1] = clearInterval(playerRoom.offline_timer[1]);
|
||||
playerRoom.offline_timer[0] = -1;
|
||||
playerRoom.offline_timer[1] = -1;
|
||||
clearInterval(playerRoom.offline_alltimer);
|
||||
playerRoom.offline_alltimer=-1;
|
||||
clearInterval(playerRoom.timer[0]);
|
||||
clearInterval(playerRoom.timer[1]);
|
||||
clearInterval(playerRoom.timer[2]);
|
||||
playerRoom.timer[0]=-1;
|
||||
playerRoom.timer[1]=-1;
|
||||
playerRoom.timer[2]=-1;
|
||||
playerRoom.save = 1;
|
||||
rr = mod_jxmj.save(playerRoom, o_room, 1);
|
||||
//console.log(rr)
|
||||
if (playerRoom) {
|
||||
playerRoom = {};
|
||||
playerRoom = null;
|
||||
mod_jxmj[roomcode] = {};
|
||||
mod_jxmj[roomcode] = null;
|
||||
delete mod_jxmj[roomcode];
|
||||
mod_jxmj.Storage_clear(roomcode, o_room);
|
||||
}
|
||||
mod_jxmj.Storage_clear(roomcode, o_room);
|
||||
if (rr && rr.user_point != undefined) {
|
||||
r.user_point = ExArray.copyArray(rr.user_point);
|
||||
}
|
||||
if (rr && rr.turn_point != undefined) {
|
||||
r.turn_point = ExArray.copyArray(rr.turn_point);
|
||||
}
|
||||
if (rr && rr.rep != undefined) {
|
||||
r.rep = ExArray.copyArray(rr.rep);
|
||||
}
|
||||
if (rr && rr.p != undefined) {
|
||||
r.p = ExArray.copyArray(rr.p);
|
||||
}
|
||||
if (rr && rr.statis != undefined) {
|
||||
r.statis = ExArray.copyArray(rr.statis);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
};
|
||||
//流局流程
|
||||
//流局判断
|
||||
mod_jxmj.liuJu = function (playerRoom, next_seat, tail_cards) {
|
||||
tail_cards = tail_cards || 0;
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
var seat = playerRoom.last_operate[2];
|
||||
var next_seat0 = seat + 1;
|
||||
var n = 0;
|
||||
var remain_card = playerRoom.config.remain_card;
|
||||
var has_card = (countPoker()>remain_card);
|
||||
|
||||
function countPoker() {
|
||||
var n = 0;
|
||||
var length = playerRoom.poker.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
(playerRoom.poker[i] > 0) &&( n += 1);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
for (var i = 0; i < playerRoom.poker.length; i++) {
|
||||
if (playerRoom.poker[i] > 0) {
|
||||
n += 1;
|
||||
//break;
|
||||
}
|
||||
}
|
||||
|
||||
if (next_seat0 > person - 1) {
|
||||
next_seat0 = 0;
|
||||
}
|
||||
if (next_seat == undefined) {
|
||||
next_seat = next_seat0;
|
||||
}//下回控制权
|
||||
if (playerRoom.hu_note[2] != 2) {
|
||||
if (playerRoom.hu_note[2] == -1) {
|
||||
playerRoom.hu_note[2] = -2;
|
||||
}
|
||||
}
|
||||
playerRoom.hu_note[2] = -2;
|
||||
|
||||
if (!has_card) {
|
||||
playerRoom.hu_note[2] = 2;//记录流局
|
||||
playerRoom.final_hu = [4, [0, 0], -1, -1];//最终胡:座位、胡的牌、胡的类型
|
||||
playerRoom.act_chao_host = [4, 6];//抄庄烂庄计时器
|
||||
//LOL进贤荒庄计分
|
||||
if (playerRoom.config.donot==1&&playerRoom.config.electric==0){//不打牌,无限发电
|
||||
|
||||
}else {
|
||||
mod_jxmj.jxUtil.update_jing_score(playerRoom, true);
|
||||
var jscore=mod_jxmj.jxUtil.get_king_score(playerRoom,"all");
|
||||
var turn = playerRoom.turn[1];
|
||||
for (var i = 0; i < person; i++) {
|
||||
playerRoom.turn_point[turn][i]=jscore[i]+playerRoom.turn_point[turn][i];
|
||||
// // turn_point[i]=score_in_card[i]+turn_point[i];
|
||||
}
|
||||
}
|
||||
if (mod_jxmj.config.chao_host == 2) {
|
||||
var host = playerRoom.identity[4];
|
||||
var turn = playerRoom.turn[1];
|
||||
var base = playerRoom.roomtype[8] || 0;if(base==-1){base =0;}
|
||||
var base_score = mod_jxmj.config.base_score;
|
||||
base = base_score[base];
|
||||
playerRoom.turn_point[turn][host] += 3 * base;//处理烂庄分数
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (i != host) {
|
||||
playerRoom.turn_point[turn][i] -= 1 * base;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(has_card){
|
||||
mod_jxmj.judge_bar(playerRoom, next_seat);
|
||||
mod_jxmj.hu_pai_zimo(playerRoom, next_seat)&&( playerRoom.user_ctrl[10] += 1);//控制权是否有变动
|
||||
}
|
||||
return has_card;
|
||||
}
|
||||
576
codes/games/server/games/jinxian_mj/import/imp_hu_judge.js
Normal file
576
codes/games/server/games/jinxian_mj/import/imp_hu_judge.js
Normal file
@@ -0,0 +1,576 @@
|
||||
//KO( 玩家摸牌后的判断)
|
||||
//自摸判断
|
||||
mod_jxmj.hu_pai_zimo = function (playerRoom, seat, tail_cards) {
|
||||
var arr = ExArray.copyArray(playerRoom.hand[seat][0]);
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
var first_card = playerRoom.poker[pos];
|
||||
var arrs = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
tail_cards = tail_cards || 0;
|
||||
var hupai = 0;
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
|
||||
if (first_card > 0) {
|
||||
//是否海底牌
|
||||
|
||||
if (playerRoom.config.pai_num == 112) {//红肿玩法
|
||||
//是否起手4红中,胡牌
|
||||
//console.log("aaaaaaa");
|
||||
var judge_hupai = mod_jxmj.a.check4HZ(playerRoom.hand[seat], first_card);
|
||||
if (judge_hupai) {
|
||||
//胡牌
|
||||
playerRoom.user_eat_bump[seat][5] = 4;
|
||||
return judge_hupai;
|
||||
}
|
||||
}
|
||||
hupai = mod_jxmj.a.ting_1pai(playerRoom, arr, first_card, arrs, seat,0,0,1);
|
||||
}
|
||||
playerRoom.jinghu=[0,0,0,0];
|
||||
if (hupai>0&&person==2&& playerRoom.config.ccchu>0&&mod_jxmj.config.nanchang==0){
|
||||
var turn_point=mod_jxmj.get_jinxian_score(playerRoom, seat, first_card, 0,hupai);
|
||||
var score=Math.abs(turn_point[0])
|
||||
if (score<8*playerRoom.config.ccchu){
|
||||
// console.log("分数:",turn_point);
|
||||
hupai=0;
|
||||
}else {
|
||||
// console.log("分数:",turn_point);
|
||||
}
|
||||
}
|
||||
if(hupai&&playerRoom.robot[seat]==1&&playerRoom.sea[seat][playerRoom.sea[seat].length-1]==playerRoom.user_ctrl[3]){
|
||||
playerRoom.hand[seat][0]=mod_jxmj.b.robot_change_pai(arr,playerRoom);
|
||||
hupai=0;
|
||||
}
|
||||
if(hupai){
|
||||
playerRoom.user_eat_bump[seat][5] = 1;
|
||||
}
|
||||
return hupai;
|
||||
}
|
||||
//点胡判断
|
||||
mod_jxmj.hu_pai_dianhu = function (playerRoom, seat, throw_card, qiang,peng) {
|
||||
var hu_seat = [];
|
||||
qiang = qiang || 0;
|
||||
peng=peng || 0;
|
||||
if (qiang == 0 && mod_jxmj.config.dianhu == 0) {
|
||||
return hu_seat;
|
||||
}
|
||||
if (throw_card == -1) {
|
||||
return hu_seat;
|
||||
}
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (i != seat) {
|
||||
|
||||
if(playerRoom.robot[i]>-1 && peng==0)
|
||||
{
|
||||
if(playerRoom.put_number[i]>=playerRoom.hu_timer[i])
|
||||
{var l=playerRoom.sea[i].length;
|
||||
if(l>0 && playerRoom.sea[i][l-1]==throw_card)
|
||||
{}
|
||||
else
|
||||
{
|
||||
if(parseInt(Math.random()*10)>4)
|
||||
{mod_jxmj.set_next_pos_to_hu(playerRoom, person,i,1,throw_card);}
|
||||
if(playerRoom.user_ctrl[3]>0)
|
||||
{var pos = playerRoom.user_ctrl[8];
|
||||
var first_card = playerRoom.poker[pos];
|
||||
if(first_card>-1)
|
||||
{playerRoom.user_ctrl[3] = first_card;}
|
||||
}
|
||||
// console.log("点炮deal_card_to="+JSON.stringify(playerRoom.hand[i])+"/"+throw_card);
|
||||
}
|
||||
}}
|
||||
|
||||
var arr = ExArray.copyArray(playerRoom.hand[i][0]);
|
||||
var arrs = ExArray.copyArray(playerRoom.hand[i]);
|
||||
if (mod_jxmj.config.wait_hu == 1 && playerRoom.wait_hu[i] > 0&&playerRoom.can_hu[i].indexOf(throw_card)!=-1) {
|
||||
//continue;//用playerRoom.guohu代替playerRoom.can_hu、playerRoom.wait_hu
|
||||
}
|
||||
|
||||
var hupai = 0;
|
||||
var guo_hu_pai_pos=-1;
|
||||
//if (playerRoom.roomtype[14] == 2)
|
||||
{guo_hu_pai_pos=playerRoom.sea_chu[i].indexOf(throw_card);}//过胡不能胡的牌
|
||||
if(guo_hu_pai_pos==-1)
|
||||
{hupai = mod_jxmj.a.ting_1pai(playerRoom, arr, throw_card, arrs, seat, 1,i,1);}
|
||||
if (hupai) {//判断过手胡
|
||||
var ban = 0;
|
||||
var l = 0;
|
||||
if(playerRoom.guohu[i]) {
|
||||
l = playerRoom.guohu[i].length;
|
||||
}
|
||||
if(l > 0) {
|
||||
if(playerRoom.guohu[i].indexOf(throw_card)!=-1)
|
||||
{ban = 1;}
|
||||
}
|
||||
if(ban == 0) {
|
||||
hu_seat[i] = 1;
|
||||
}
|
||||
}
|
||||
if (hupai>0){
|
||||
playerRoom.can_hu[i].push(throw_card);
|
||||
}
|
||||
playerRoom.jinghu=[0,0,0,0];
|
||||
if (hupai>0&&person==2&& playerRoom.config.ccchu>0&&mod_jxmj.config.nanchang==0){
|
||||
var turn_point=mod_jxmj.get_jinxian_score(playerRoom, i, throw_card, 1,hupai);
|
||||
var score=Math.abs(turn_point[0])
|
||||
if (score<8*playerRoom.config.ccchu){
|
||||
// console.log("分数:",turn_point);
|
||||
hu_seat = [];
|
||||
// console.log(hu_seat);
|
||||
}else {
|
||||
// console.log("分数:",turn_point);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hu_seat.length > 0) {
|
||||
playerRoom.user_ctrl[3] = -1;//不允许摸牌,须其他家过牌才可摸牌
|
||||
playerRoom.user_ctrl[2] = -1;//当前没有控制权
|
||||
playerRoom.user_ctrl[10] += 1;//控制权是否有变动
|
||||
var next_seat = seat + 1;
|
||||
if (next_seat > person - 1) {
|
||||
next_seat = 0;
|
||||
}
|
||||
playerRoom.user_eat_bump[next_seat][3] = 0;//下家不能自摸杠
|
||||
playerRoom.user_eat_bump[next_seat][4] = 0;//下家不能暗杠
|
||||
}
|
||||
//playerRoom.jinghu=[0,0,0,0];
|
||||
return hu_seat;
|
||||
}
|
||||
//是否真胡的判断
|
||||
mod_jxmj.a.ting_1pai = function (playerRoom, arr, card, arrs1, seat, dianhu,huseat,unlock_high_level_hu) {//arr:手牌 arrs1:手牌+吃椪杠
|
||||
dianhu = dianhu || 0;
|
||||
unlock_high_level_hu=unlock_high_level_hu || 0;//是否禁止高级胡
|
||||
var arrs = ExArray.copyArray(arrs1);
|
||||
var ting = 0;
|
||||
var jing = playerRoom.jing[1];
|
||||
var JING = [playerRoom.jing[0], playerRoom.jing[1]];
|
||||
var arr1 = arr.concat(card);
|
||||
Array.prototype.in_array = function (element) {
|
||||
for (var i = 0; i < this.length; i++) {
|
||||
if (this[i] == element) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (arr1.length == 1 || arr1.length == 3 || arr1.length == 4) {
|
||||
return 0;
|
||||
}
|
||||
else if (arr1.length == 2) {
|
||||
|
||||
if (arr1[0] > 40 && arr1[0] <= 40 && arr1[1] > 40 && arr1[1] <= 40) {
|
||||
//是否字一色
|
||||
}
|
||||
if (arr1[0] != arr1[1] && !JING.in_array(arr1[0]) && !JING.in_array(arr1[1]) || dianhu == 1 && arr1[0] != arr1[1] && !JING.in_array(arr1[0])) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// if (arr1[0] != arr1[1] && arr1[0] != jing && arr1[1] != jing || dianhu == 1 && arr1[0] != arr1[1] && arr1[0] != jing) {
|
||||
// return 0;
|
||||
// }
|
||||
else {
|
||||
// if(arr1[0]!=arr1[1] && arr1[0]==jing)
|
||||
// {playerRoom.jing_reduce=1;}
|
||||
if (arr1[0] == arr1[1] && JING.in_array(arr1[0])) {
|
||||
if (dianhu) {
|
||||
playerRoom.jing_reduce = 1;
|
||||
}
|
||||
else {
|
||||
playerRoom.jing_reduce = 2;
|
||||
}
|
||||
}
|
||||
if (JING.in_array(arr1[0])&&dianhu==1) {
|
||||
return 0;
|
||||
}
|
||||
// return 1;
|
||||
}
|
||||
}
|
||||
var jings = ExArray.copyArray(playerRoom.jing);
|
||||
arrs[0] = ExArray.copyArray(arr1); //arrs 所有牌
|
||||
|
||||
var hu_bool = mod_jxmj.a.judge_jia_hu(arrs, jings, card, dianhu, playerRoom);
|
||||
if (hu_bool) {
|
||||
ting = 2;
|
||||
}
|
||||
else {//真胡
|
||||
arrs[0] = ExArray.copyArray(arr1);
|
||||
//arr, card, arrs, jings, dianhu, roomcode, 0, 0, 1,seat,j_hu_seat
|
||||
var hu_bool = mod_jxmj.b.JING8_zhen_hu(arr, card, arrs, jings, dianhu, playerRoom);
|
||||
if (hu_bool) {
|
||||
ting = 1;
|
||||
}
|
||||
}
|
||||
|
||||
var host = playerRoom.identity[4];
|
||||
if (playerRoom.hu_note[2] == -1&& host != huseat&&playerRoom.baoting[huseat]==2){
|
||||
return ting;
|
||||
}
|
||||
|
||||
if (dianhu==1&&ting>0 && unlock_high_level_hu==0) {
|
||||
var aaas = ExArray.copyArray(arrs[0])
|
||||
if (aaas.indexOf(jings[1]) > -1) {
|
||||
aaas.splice(aaas.indexOf(jings[1]), 1)
|
||||
}
|
||||
if (aaas.indexOf(card) > -1) {
|
||||
aaas.splice(aaas.indexOf(card), 1)
|
||||
}
|
||||
if (aaas.length == 0) {
|
||||
ting = 0;
|
||||
}
|
||||
if (mod_jxmj.b.hu0_jing(aaas, jings, playerRoom)) {
|
||||
ting = 0;
|
||||
}
|
||||
var aaas = ExArray.copyArray(arrs[0])
|
||||
if (aaas.indexOf(jings[0]) > -1) {
|
||||
aaas.splice(aaas.indexOf(jings[0]), 1)
|
||||
}
|
||||
if (aaas.indexOf(card) > -1) {
|
||||
aaas.splice(aaas.indexOf(card), 1)
|
||||
}
|
||||
if (aaas.length == 0) {
|
||||
ting = 0;
|
||||
}
|
||||
if (mod_jxmj.b.hu0_jing(aaas, jings, playerRoom)) {
|
||||
ting = 0;
|
||||
}
|
||||
|
||||
var aaas = ExArray.copyArray(arrs[0]);
|
||||
if (aaas.indexOf(card) > -1) {
|
||||
aaas.splice(aaas.indexOf(card), 1)
|
||||
}
|
||||
ExArray.ordArray(aaas);
|
||||
if (aaas.indexOf(jings[0]) > -1 || aaas.indexOf(jings[1]) > -1) { //七对精调
|
||||
var jing_num = 0;
|
||||
var num6 = 0;
|
||||
for (var i = 0; i < aaas.length; i++) { //计算jing的个数,数组里剔除jing
|
||||
if (aaas[i] == jings[0] || aaas[i] == jings[1]) {
|
||||
jing_num += 1;
|
||||
aaas.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < aaas.length;) {
|
||||
if (aaas[i] == aaas[i + 1]) {
|
||||
i += 2;
|
||||
num6++;
|
||||
} else {
|
||||
jing_num -= 1;
|
||||
i++;
|
||||
num6++;
|
||||
}
|
||||
}
|
||||
if (num6 * 2 + jing_num == 13 && jing_num>0){ ting = 0;}
|
||||
}
|
||||
}
|
||||
return ting;
|
||||
}
|
||||
|
||||
mod_jxmj.get_jinxian_score=function(playerRoom, seat, card, dianhu,hu_zhenjia){
|
||||
dianhu = dianhu || 0;
|
||||
var arr1 = ExArray.copyArray(playerRoom.hand[seat][0]);
|
||||
var arrs = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
var hu_zhenjia = hu_zhenjia;//;mod_jxmj.a.ting_1pai(playerRoom, arr1, card, arrs, seat);
|
||||
var type = {};
|
||||
var hu_arr = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
hu_arr[0] = playerRoom.hand[seat][0].concat(card);
|
||||
ExArray.ordArray(hu_arr[0]);
|
||||
//console.log("得到最终胡的类型="+hu_zhenjia)
|
||||
if (hu_zhenjia == 1) {
|
||||
type = mod_jxmj.hu_result_zhen(hu_arr, card, playerRoom, dianhu, seat,arr1);
|
||||
}
|
||||
else if (hu_zhenjia == 2) {
|
||||
//去掉?
|
||||
type = mod_jxmj.hu_result_jia(hu_arr, card, playerRoom, dianhu, seat,arr1);//假胡
|
||||
}
|
||||
var base = playerRoom.roomtype[8] || 0;if(base==-1){base =0;}
|
||||
var base_score = mod_jxmj.config.base_score;
|
||||
base = base_score[base];
|
||||
type.point = type.point * base;
|
||||
if (dianhu==0){
|
||||
dianhu=0;
|
||||
}else if (dianhu>0){
|
||||
var sseat = playerRoom.last_operate[2];
|
||||
dianhu=sseat+1;
|
||||
}
|
||||
var turn_point = ExArray.copyArray(mod_jxmj.do_jinxian_point(playerRoom,dianhu, type, seat));//处理分数
|
||||
console.log("胡牌类型:",type);
|
||||
return turn_point;
|
||||
}
|
||||
|
||||
//判断是否假胡
|
||||
mod_jxmj.a.judge_jia_hu = function (arrs, jings, card, dianhu, playerRoom) {
|
||||
var result = 0;
|
||||
dianhu = dianhu || 0;
|
||||
//(0)假胡(1)平胡2 点-2 ;(2)13烂3((3)七星6) 点-3;(4)碰碰5 点炮-5;(5)7对7 点-7;(6)清一色假5真10;清一色+碰碰20;清一色+7对40;(7)字一色假10真20;字一色+碰碰40;字一色+7对80;(8)天20;(9)地20点出闲不出;(10)杠花分数*2;(11)双杠开花;(12)三杠开花(13)四杠开花(14)流局1;(15)抄庄-1;
|
||||
|
||||
var hu = 0;
|
||||
|
||||
var type = mod_jxmj.b.checkPPH_jing(arrs, jings, card, playerRoom, dianhu)//碰碰胡
|
||||
if (type) {
|
||||
result = 4 * type;
|
||||
hu = 1;
|
||||
}
|
||||
|
||||
var type = mod_jxmj.b.check7D_jing(arrs, jings, card, playerRoom, dianhu);//七对
|
||||
if (hu == 0 && type) {
|
||||
result = 4 * type;
|
||||
}
|
||||
|
||||
var type = mod_jxmj.b.check13L_jing(arrs, jings, card, playerRoom, dianhu)//十三烂
|
||||
if (hu == 0 && type) {
|
||||
result = 4 * type;
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//是否真胡的判断2
|
||||
mod_jxmj.a.hu_bool = function (hu) {
|
||||
//判断函数mod_hzmj.a.hu的结果
|
||||
for (var i = 0; i < hu.type.length; i++) {
|
||||
if (hu.type[i]) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//是否真胡的判断1 arr:是arr[0]加上摸的牌
|
||||
mod_jxmj.a.hu = function (arr, jiang) {
|
||||
jiang = jiang || 0;
|
||||
var arr1 = ExArray.copyArray(arr);
|
||||
if (arr1.length == 2) {
|
||||
if (arr1[0] == arr1[1]) {
|
||||
var hu = {};
|
||||
hu.jiang = [[arr1[0]]];
|
||||
hu.type = [[4]];
|
||||
return hu;
|
||||
}
|
||||
else {
|
||||
var hu = {};
|
||||
hu.jiang = [];
|
||||
hu.type = [];
|
||||
return hu;
|
||||
}
|
||||
}
|
||||
var r = mod_jxmj.a.classify_un_Pair(arr1, jiang);
|
||||
//length<=12
|
||||
var hu = {};
|
||||
hu.jiang = [];
|
||||
hu.type = [];
|
||||
var n = 0;
|
||||
// if(r.length)
|
||||
// {hu.type[n]=0;hu.jiang[n]=0;}
|
||||
for (i = 0; i < r.length; i++) {
|
||||
var len = r[i].length;
|
||||
if (len == 0) {
|
||||
hu.type[n] = 100;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
else if (len < 3 || r.jiang == 0) {
|
||||
hu.type[n] = 0;
|
||||
hu.jiang[n] = 0;
|
||||
n += 1;
|
||||
}
|
||||
else if (len == 3) {
|
||||
var res = mod_jxmj.a.check3Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
else if (len == 4) {
|
||||
var res = mod_jxmj.a.check4Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
else if (len == 6) {
|
||||
var res = mod_jxmj.a.check6Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
else if (len == 7) {
|
||||
var res = mod_jxmj.a.check7Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
else if (len == 8) {
|
||||
var res = mod_jxmj.a.check8Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
else if (len == 9) {
|
||||
var res = mod_jxmj.a.check9Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
else if (len == 10) {
|
||||
var res = mod_jxmj.a.check10Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
else if (len == 11) {
|
||||
var res = mod_jxmj.a.check11Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
else if (len == 12) {
|
||||
var res = mod_jxmj.a.check12Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
else if (len == 15) {
|
||||
var res = mod_jxmj.a.check15Pai(r[i]);
|
||||
if (res.r) {
|
||||
hu.type[n] = res;
|
||||
hu.jiang[n] = r.jiang[i];
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return hu;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//听牌判断
|
||||
mod_jxmj.ting_14_pai = function (playerRoom, seat) {
|
||||
// playerRoom.user_ctrl[9] = -1;
|
||||
var arr = ExArray.copyArray(playerRoom.hand[seat][0]);
|
||||
var arrs = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
var bao_ting = {};
|
||||
bao_ting.bao_ting = 0;
|
||||
bao_ting.throw_pai = [];
|
||||
var arr1 = ExArray.copyArray(arr);
|
||||
var pos = playerRoom.user_ctrl[8];
|
||||
arr1 = arr1.concat(playerRoom.poker[pos]);
|
||||
for (var i = 0; i <= arr1.length; i++) {
|
||||
//arr1.concat([12]);
|
||||
var arr = ExArray.copyArray(arr1);
|
||||
var card=arr.splice(i, 1);
|
||||
arrs[0] = ExArray.copyArray(arr);
|
||||
if (mod_jxmj.b.ting_allpai(playerRoom, arr, seat, arrs)) {
|
||||
if (card.length>0){
|
||||
bao_ting.throw_pai[bao_ting.throw_pai.length] = card[0];
|
||||
}
|
||||
bao_ting.bao_ting = 1;
|
||||
// playerRoom.user_ctrl[9] = seat;//下家是否听牌
|
||||
}
|
||||
}
|
||||
return bao_ting;
|
||||
}
|
||||
|
||||
mod_jxmj.ting_pai = function (playerRoom, seat) {
|
||||
var bao_ting = {};
|
||||
bao_ting.bao_ting = 0;
|
||||
bao_ting.throw_pai = [];
|
||||
var arr = ExArray.copyArray(playerRoom.hand[seat][0]);
|
||||
var arrs = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
var arr1 = ExArray.copyArray(arr);
|
||||
if (mod_jxmj.b.ting_allpai(playerRoom, arr1, seat, arrs)) {
|
||||
bao_ting.bao_ting = 1;
|
||||
}
|
||||
return bao_ting;
|
||||
}
|
||||
|
||||
//是否听牌状态
|
||||
mod_jxmj.b.ting_allpai = function (playerRoom, arr, seat, arrs) {
|
||||
var ting = 0;
|
||||
// return ting;
|
||||
var len = playerRoom.poker.length;
|
||||
for (var i = 0; i < len; i++) {
|
||||
var card = playerRoom.poker[i];
|
||||
if (card != -1 && playerRoom.jing.indexOf(card)!=-1) {
|
||||
var ting_bool = mod_jxmj.a.ting_1pai(playerRoom, arr, card, arrs, seat,0,0,1);
|
||||
if (ting_bool) {
|
||||
ting = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ting == 0) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var l = playerRoom.hand[i][0].length;
|
||||
if (i != seat) {
|
||||
for (var j = 0; j < l; j++) {
|
||||
var card = playerRoom.hand[i][0][j];
|
||||
var ting_bool =0;
|
||||
if (playerRoom.jing.indexOf(card)!=-1) {
|
||||
ting_bool = mod_jxmj.a.ting_1pai(playerRoom, arr, card, arrs, seat,0,0,1);
|
||||
}
|
||||
if (ting_bool) {
|
||||
ting = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ting == 1) {
|
||||
playerRoom.ting_status[seat] = 1;
|
||||
return card;
|
||||
}
|
||||
return ting;
|
||||
}
|
||||
|
||||
|
||||
//换万能牌
|
||||
mod_jxmj.a.change_pai_JING = function (arr, card, arrs, JING_arr, replace_card) {
|
||||
var arr1 = arr.concat(card);
|
||||
var arrs1 = ExArray.copyArray(arrs);
|
||||
for (var j = 0; j < arr1.length; j++) {
|
||||
if (arr1[j] == JING_arr[0] || arr1[j] == JING_arr[1]) {
|
||||
arr1[j] = replace_card;
|
||||
}
|
||||
}
|
||||
arrs1[0] = ExArray.copyArray(arr1);
|
||||
return arrs1;
|
||||
}
|
||||
|
||||
|
||||
mod_jxmj.b.robot_change_pai = function (arr,playerRoom) {//手牌13张
|
||||
var arr0 =ExArray.copyArray(arr);
|
||||
arr0 = mod_jxmj.b.arrange_pai(arr0, playerRoom);
|
||||
for (var i = 0; i < arr0.length-1; i++) {
|
||||
if(arr0[i]==playerRoom.user_ctrl[3]||arr0[i]==arr0[i+1]||arr0==playerRoom.jing[0]||arr0==playerRoom.jing[1]||i==arr0.length-1){
|
||||
var x1=arr0[i];
|
||||
arr0.splice(i,1); break;
|
||||
}
|
||||
}
|
||||
for (var i = 135; i > 110; i--) {
|
||||
if(playerRoom.poker[i]!=-1&&playerRoom.poker[i]!=playerRoom.jing[0]&&playerRoom.poker[i]!=playerRoom.jing[1]&&playerRoom.poker[i]!=x1){
|
||||
arr0 = arr0.concat(playerRoom.poker[i]);
|
||||
playerRoom.poker[i]=x1;break;
|
||||
}
|
||||
}
|
||||
arr0 = mod_jxmj.b.arrange_pai(arr0, playerRoom);
|
||||
return arr0;
|
||||
}
|
||||
366
codes/games/server/games/jinxian_mj/import/imp_hu_type.js
Normal file
366
codes/games/server/games/jinxian_mj/import/imp_hu_type.js
Normal file
@@ -0,0 +1,366 @@
|
||||
//得到最终胡的类型
|
||||
mod_jxmj.get_hu_obj = function (playerRoom, seat, card, dianhu, hongzhong) {
|
||||
dianhu = dianhu || 0;
|
||||
hongzhong = hongzhong || 0;
|
||||
var arr1 = ExArray.copyArray(playerRoom.hand[seat][0]);
|
||||
var arrs = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
var hu_zhenjia = mod_jxmj.a.ting_1pai(playerRoom, arr1, card, arrs, seat);
|
||||
var type = {};
|
||||
var hu_arr = ExArray.copyArray(playerRoom.hand[seat]);
|
||||
hu_arr[0] = playerRoom.hand[seat][0].concat(card);
|
||||
ExArray.ordArray(hu_arr[0]);
|
||||
if (hongzhong == 1 && playerRoom.config.pai_num == 112 && mod_jxmj.a.check4HZ(hu_arr) || dianhu == 0 && playerRoom.config.pai_num == 112 && mod_jxmj.a.check4HZ(hu_arr)) {
|
||||
type.hu_type = [20];
|
||||
type.point = 2;
|
||||
playerRoom.hu_note[1] = 1;//平胡/真胡
|
||||
}
|
||||
else {
|
||||
|
||||
var type2 = mod_jxmj.hu_result_jia(hu_arr, card, playerRoom, dianhu, seat,arr1);//假胡
|
||||
var type1 = mod_jxmj.hu_result_zhen(hu_arr, card, playerRoom, dianhu, seat,arr1);
|
||||
if(type1.point == type2.point && type1.hu_type.indexOf(10)>-1){
|
||||
hu_zhenjia=1;
|
||||
}
|
||||
|
||||
|
||||
//console.log("得到最终胡的类型="+hu_zhenjia)
|
||||
if (hu_zhenjia == 1) {
|
||||
type = mod_jxmj.hu_result_zhen(hu_arr, card, playerRoom, dianhu, seat,arr1);
|
||||
//console.log("得到最终胡的类型=" + JSON.stringify(hu_arr) + "/" + card + "/" + JSON.stringify(type));
|
||||
playerRoom.hu_note[1] = 1;//平胡/真胡
|
||||
}
|
||||
else if (hu_zhenjia == 2) {
|
||||
//去掉?
|
||||
type = mod_jxmj.hu_result_jia(hu_arr, card, playerRoom, dianhu, seat,arr1);//假胡
|
||||
playerRoom.hu_note[1] = 0;//假胡
|
||||
}
|
||||
}
|
||||
var base = playerRoom.roomtype[8] || 0;if(base==-1){base =0;}
|
||||
var base_score = mod_jxmj.config.base_score;
|
||||
base = base_score[base];
|
||||
type.point = type.point * base;
|
||||
return type;
|
||||
}
|
||||
|
||||
//平胡
|
||||
//精钓
|
||||
//七对
|
||||
//大七对
|
||||
//十三烂
|
||||
//七星十三烂
|
||||
//德国
|
||||
//杠开
|
||||
//天胡
|
||||
//地胡
|
||||
//一炮多响
|
||||
//杠开
|
||||
//抢杠胡
|
||||
|
||||
//真胡胡了什么牌型
|
||||
mod_jxmj.hu_result_zhen = function (arr, card, playerRoom, dianhu, seat,arr1) {
|
||||
var result = {};
|
||||
result.hu_type = [];
|
||||
var jings = ExArray.copyArray(playerRoom.jing);
|
||||
var point = 1;
|
||||
var double=0;
|
||||
var ban=[0,0];
|
||||
var host = playerRoom.identity[4];
|
||||
// if (playerRoom.hu_note[2] == -1 && host == seat&&playerRoom.baoting[seat] == 2) {
|
||||
// playerRoom.hu_note[2] = 0;//记录天胡;
|
||||
// console.log("天湖")
|
||||
// ban[0]=1;
|
||||
// point = 2*2*2;
|
||||
// double=3;
|
||||
// }else if (playerRoom.hu_note[2] == 11 && host != seat&&playerRoom.baoting[seat] == 2) {
|
||||
// playerRoom.hu_note[2] = 1;//记录地胡
|
||||
// console.log("地湖")
|
||||
// ban[0]=1;
|
||||
// point = 2*2*2;
|
||||
// double=3;
|
||||
// }
|
||||
|
||||
//判断精吊
|
||||
if ((arr1.indexOf(jings[0])!=-1||arr1.indexOf(jings[1])!=-1)&&dianhu==0&&result.hu_type.indexOf(5)==-1&&result.hu_type.indexOf(6)==-1) {
|
||||
if (arr[0].length==2){
|
||||
// console.log("精吊","1番")
|
||||
point = point*2;
|
||||
double=double+1;
|
||||
result.hu_type[result.hu_type.length] = 2;
|
||||
if (arr[0][0]==arr[0][1]){
|
||||
playerRoom.jinghu[seat]==1;
|
||||
}
|
||||
}else {
|
||||
var mm=ExArray.copyArray(arr[0]);
|
||||
var index=mm.indexOf(jings[0]);
|
||||
var hu=0;
|
||||
if (index!=-1){
|
||||
mm.splice(mm.indexOf(jings[0]),1)
|
||||
mm.splice(mm.indexOf(card),1);
|
||||
hu = mod_jxmj.b.hu0(mm);
|
||||
if (hu&&jings[0]==card){
|
||||
playerRoom.jinghu[seat]==1;
|
||||
}
|
||||
if (!hu){
|
||||
hu=mod_jxmj.b.hu0_jing(mm,jings,playerRoom);
|
||||
}
|
||||
}
|
||||
if (hu==0){
|
||||
mm=ExArray.copyArray(arr[0]);
|
||||
index=mm.indexOf(jings[1]);
|
||||
if (index!=-1){
|
||||
mm.splice(mm.indexOf(jings[1]),1);
|
||||
mm.splice(mm.indexOf(card),1);
|
||||
hu = mod_jxmj.b.hu0(mm);
|
||||
if (hu&&jings[1]==card){
|
||||
playerRoom.jinghu[seat]==1;
|
||||
}
|
||||
if (!hu){
|
||||
hu=mod_jxmj.b.hu0_jing(mm,jings,playerRoom);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hu!=0){
|
||||
//playerRoom.jingdiao_pinghu[0]=1;
|
||||
// console.log("精吊","1番")
|
||||
point = point*2;
|
||||
double=double+1;
|
||||
result.hu_type[result.hu_type.length] = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod_jxmj.b.JING8_zhen_hu(arr[0], card, arr, jings, dianhu, playerRoom, 1, seat + 1);
|
||||
if (point == 1) {
|
||||
point = 1;
|
||||
// console.log("平湖")
|
||||
result.hu_type[result.hu_type.length] = 1;
|
||||
}
|
||||
if (playerRoom.jinghu[seat]==1){//精不当精
|
||||
point=point*2;
|
||||
double=double+1;
|
||||
result.hu_type[result.hu_type.length] = 10;
|
||||
if (result.hu_type.indexOf(3)!=-1){
|
||||
point=point*2*2;
|
||||
// console.log("德国七对","+2番")
|
||||
}
|
||||
// if (result.hu_type.indexOf(6)!=-1){
|
||||
// point=point*2;
|
||||
// console.log("德国七星13L","+1番")
|
||||
// }
|
||||
// console.log("德国","1番")
|
||||
}
|
||||
// point=Math.pow(2,double)
|
||||
result.point = point;
|
||||
return result;
|
||||
}
|
||||
|
||||
//假胡胡了什么牌型
|
||||
mod_jxmj.hu_result_jia = function (arr, card, playerRoom, dianhu, seat,arr1) {
|
||||
var result = {};
|
||||
result.hu_type = [];
|
||||
var point = 1;
|
||||
var jings = ExArray.copyArray(playerRoom.jing);
|
||||
var ban=[0,0];
|
||||
var double=0;
|
||||
var host = playerRoom.identity[4];
|
||||
// if ((playerRoom.hu_note[2] == -1 && host == seat )&&playerRoom.baoting[seat] == 2) {
|
||||
// playerRoom.hu_note[2] = 0;//记录天胡;
|
||||
// //console.log("天湖")
|
||||
// ban[0]=1;
|
||||
// point = 2*2*2;
|
||||
// double=3;
|
||||
// }else if (playerRoom.hu_note[2] == 11 && host != seat&&playerRoom.baoting[seat] == 2) {
|
||||
// playerRoom.hu_note[2] = 1;//记录地胡
|
||||
// //console.log("地湖")
|
||||
// ban[0]=1;
|
||||
// point = 2*2*2;
|
||||
// double=3;
|
||||
// }
|
||||
|
||||
//判断精吊
|
||||
var jingdiao_type= [0,0];
|
||||
if ((arr1.indexOf(jings[0])!=-1||arr1.indexOf(jings[1])!=-1)&&dianhu==0&&result.hu_type.indexOf(5)==-1&&result.hu_type.indexOf(6)==-1) {
|
||||
if (arr[0].length==2){
|
||||
// console.log("精吊","1番")
|
||||
point = point*2;
|
||||
result.hu_type[result.hu_type.length] = 2;
|
||||
if (arr[0][0]==arr[0][1]){
|
||||
playerRoom.jinghu[seat]==1;
|
||||
}
|
||||
}else {
|
||||
var mm=ExArray.copyArray(arr[0]);
|
||||
var index=mm.indexOf(jings[0]);
|
||||
var hu=0;
|
||||
if (index!=-1){
|
||||
mm.splice(mm.indexOf(jings[0]),1)
|
||||
mm.splice(mm.indexOf(card),1);
|
||||
hu = mod_jxmj.b.hu0(mm);
|
||||
if (hu&&jings[0]==card){
|
||||
playerRoom.jinghu[seat]==1;
|
||||
jingdiao_type[0]=1;
|
||||
}
|
||||
if (!hu){
|
||||
hu=mod_jxmj.b.hu0_jing(mm,jings,playerRoom);
|
||||
if(hu){jingdiao_type[0]=1;}
|
||||
}
|
||||
}
|
||||
if (hu==0){
|
||||
mm=ExArray.copyArray(arr[0]);
|
||||
index=mm.indexOf(jings[1]);
|
||||
if (index!=-1){
|
||||
mm.splice(mm.indexOf(jings[1]),1);
|
||||
mm.splice(mm.indexOf(card),1);
|
||||
hu = mod_jxmj.b.hu0(mm);
|
||||
if (hu&&jings[1]==card){
|
||||
playerRoom.jinghu[seat]==1;
|
||||
jingdiao_type[0]=1;
|
||||
}
|
||||
if (!hu){
|
||||
hu=mod_jxmj.b.hu0_jing(mm,jings,playerRoom);
|
||||
if(hu){
|
||||
jingdiao_type[0]=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mm=ExArray.copyArray(arr[0]);
|
||||
mm.splice(mm.indexOf(card),1);
|
||||
ExArray.ordArray(mm);
|
||||
if (mm.indexOf(jings[0]) > -1 || mm.indexOf(jings[1]) > -1) { //七对精调
|
||||
//var mm = ExArray.copyArray(mm[0]);
|
||||
var jing_num = 0;
|
||||
var num6 = 0;
|
||||
for (var i = 0; i < mm.length; i++) { //计算jing的个数,数组里剔除jing
|
||||
if (mm[i] == jings[0] || mm[i] == jings[1]) {
|
||||
jing_num += 1;
|
||||
mm.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < mm.length;) {
|
||||
if (mm[i] == mm[i + 1]) {
|
||||
i += 2;
|
||||
num6++;
|
||||
} else {
|
||||
jing_num -= 1;
|
||||
i++;
|
||||
num6++;
|
||||
}
|
||||
}
|
||||
if(num6*2+jing_num == 13&&jing_num>0){ hu = 1;jingdiao_type[1]=1;}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (hu!=0){
|
||||
// console.log("精吊","1番")
|
||||
point = point*2;
|
||||
result.hu_type[result.hu_type.length] = 2;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
var qixing_7d =0;
|
||||
if(playerRoom.config.nanchang==1) {
|
||||
var array = ExArray.copyArray(arr[0]);
|
||||
for (i = 1; i < 30; i++) {
|
||||
if (i == jings[0] && i != jings[1]) continue;
|
||||
if (array.indexOf(i) != -1) {
|
||||
qixing_7d = -1;
|
||||
}
|
||||
}
|
||||
if (qixing_7d == 0&&mod_jxmj.b.check7D_jing(arr, jings, card, playerRoom, dianhu, seat + 1)) {
|
||||
qixing_7d = 1;}
|
||||
}
|
||||
|
||||
|
||||
var type = mod_jxmj.b.checkPPH_jing(arr, jings, card, playerRoom, dianhu, seat + 1)//碰碰胡
|
||||
if (ban[0]==0&&type&&qixing_7d!=1) {
|
||||
point = point*2*2*2;
|
||||
if(playerRoom.config.nanchang==1){
|
||||
point = point/4;
|
||||
}
|
||||
result.hu_type[result.hu_type.length] = 4;
|
||||
// console.log("碰碰胡","3番")
|
||||
}
|
||||
|
||||
if(result.hu_type.indexOf(4)==-1||qixing_7d==1){
|
||||
var type = mod_jxmj.b.check7D_jing(arr, jings, card, playerRoom, dianhu, seat + 1);//七對
|
||||
if (ban[0]==0&&type) {
|
||||
point = point * 2;
|
||||
if(qixing_7d==1){
|
||||
point = point * 2;
|
||||
}
|
||||
result.hu_type[result.hu_type.length] = 3;
|
||||
// console.log("七對", "1番")
|
||||
}
|
||||
}
|
||||
|
||||
if(result.hu_type.indexOf(4)!=-1 && mod_jxmj.b.check7D_jing(arr, [-1,-1], card, playerRoom, dianhu, seat + 1)){
|
||||
var type = mod_jxmj.b.check7D_jing(arr, [-1,-1], card, playerRoom, dianhu, seat + 1);//有德国时七對四碰同时存在 判定为七对
|
||||
if (ban[0]==0&&type) {
|
||||
point = point / 4;
|
||||
if(playerRoom.config.nanchang==1){
|
||||
point = point*4;
|
||||
}
|
||||
result.hu_type[result.hu_type.length] = 3;
|
||||
result.hu_type.splice(result.hu_type.indexOf(4),1);
|
||||
// console.log("七對", "1番")
|
||||
}
|
||||
}
|
||||
if(result.hu_type.indexOf(4)!=-1 && jingdiao_type[0]==0 && jingdiao_type[1]==1){ //四碰精调与七对精调冲突
|
||||
result.hu_type.splice(result.hu_type.indexOf(2),1);
|
||||
point = point/2;
|
||||
}
|
||||
|
||||
var type = mod_jxmj.b.check13L_jing(arr, jings, card, playerRoom, dianhu, seat + 1);//
|
||||
if (ban[0]==0&&type) {
|
||||
//
|
||||
// console.log("13L","1番")
|
||||
point = point*2;
|
||||
result.hu_type[result.hu_type.length] = 5;
|
||||
if (type==2){
|
||||
point = point*2*2;
|
||||
if(playerRoom.config.nanchang==1){
|
||||
point = point/2;
|
||||
}
|
||||
// console.log("713L","3番")
|
||||
result.hu_type[result.hu_type.length] = 6;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (playerRoom.jinghu[seat]==1){//精不当精
|
||||
point=point*2;
|
||||
result.hu_type[result.hu_type.length] = 10;
|
||||
if (result.hu_type.indexOf(3)!=-1){
|
||||
point=point*2*2;
|
||||
// console.log("德国七对","+2番")
|
||||
if(playerRoom.config.nanchang==1){
|
||||
point = point/2;
|
||||
}
|
||||
}
|
||||
// if (result.hu_type.indexOf(6)!=-1){
|
||||
// point=point*2;
|
||||
// console.log("德国七星13L","+1番")
|
||||
// }
|
||||
// console.log("德国","1番")
|
||||
}
|
||||
// point=Math.pow(2,double)
|
||||
result.point = point;
|
||||
return result;
|
||||
}
|
||||
12
codes/games/server/games/jinxian_mj/import/import.js
Normal file
12
codes/games/server/games/jinxian_mj/import/import.js
Normal file
@@ -0,0 +1,12 @@
|
||||
min_loadJsFile(mod_jxmj.roots+"import/do_point.js", function(){
|
||||
min_loadJsFile(mod_jxmj.roots+"import/imp_flow.js", function(){
|
||||
min_loadJsFile(mod_jxmj.roots+"import/imp_base.js", function(){
|
||||
min_loadJsFile(mod_jxmj.roots+"import/imp_hu_type.js", function(){
|
||||
min_loadJsFile(mod_jxmj.roots+"import/imp_hu_judge.js", function(){
|
||||
min_loadJsFile(mod_jxmj.roots+"import/imp_chi_peng_gang.js", function(){
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
BIN
codes/games/server/games/jinxian_mj/import/结束时的函数列表.xlsx
Normal file
BIN
codes/games/server/games/jinxian_mj/import/结束时的函数列表.xlsx
Normal file
Binary file not shown.
2
codes/games/server/games/jinxian_mj/import/输出.txt
Normal file
2
codes/games/server/games/jinxian_mj/import/输出.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
do_point处理分数
|
||||
imp_flow重连、解散流程
|
||||
101
codes/games/server/games/jinxian_mj/mem/mem_ini.js
Normal file
101
codes/games/server/games/jinxian_mj/mem/mem_ini.js
Normal file
@@ -0,0 +1,101 @@
|
||||
//以下代码是什么目的?
|
||||
//执行后客户端收到服务器发的包后自动开战
|
||||
//以下代码是什么时候执行?
|
||||
//房间满足开战人数时自动执行
|
||||
//以下代码是还可以做什么?
|
||||
//开始游戏需要做内存初始化
|
||||
min_loadJsFile(mod_jxmj.roots+"mem/mem_ini_ctrl.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots+"mem/mem_ini_re.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots+"mem/mem_ini_room.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots+"mem/mem_ini_player.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots+"mem/mem_ini_save.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots+"mem/mem_ini_card.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots+"mem/mem_ini_record.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots+"mem/mem_ini_law_sp.js", function () {
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
//创建房间:这里在客户端开战时执行,一般在这里初始化所有数据
|
||||
mod_jxmj.makewar = function (o_room, o_game_config) {
|
||||
var persons=[4,4,3,2];
|
||||
var person=persons[o_room.roomtype[6]] || 4;
|
||||
o_room.seatlist.length=person;
|
||||
o_room.o_desk=cls_desk.new(o_room);// 新建牌桌对象
|
||||
o_room.o_desk.data.asetlist=[];
|
||||
// o_room.o_desk.data.asetlist.push({"turn":0});
|
||||
var roomcode=o_room.roomcode;
|
||||
//mod_jxmj.ini_clear_save(roomcode);
|
||||
|
||||
//playerRoom.turn[1]=-1;
|
||||
mod_jxmj[roomcode]=mod_jxmj[roomcode] || {};
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
playerRoom.roomcode = roomcode;
|
||||
playerRoom.asetlist=ExArray.copyArray(o_room.o_desk.data.asetlist);
|
||||
|
||||
mod_jxmj.ini(playerRoom, o_room);//playerRoom.status = 0;//房间状态
|
||||
mod_jxmj.roomconfig(o_room,playerRoom);
|
||||
playerRoom.whoready=playerRoom.whoready||[0,0,0,0];
|
||||
for (var i = 0; i < person; i++) {
|
||||
//playerRoom.whoready[i]=0;
|
||||
/*机器人自动准备*/
|
||||
if((playerRoom.roomtype[14]==3||playerRoom.roomtype[14]==4)&&o_room.seatlist[i].isrobot){
|
||||
mod_jxmj.player_enter(o_room,i);
|
||||
playerRoom.whoready[i]=1;
|
||||
playerRoom.robot[i]=1;
|
||||
}
|
||||
}
|
||||
|
||||
if (playerRoom.offline_alltimer==-1){
|
||||
var pack = {
|
||||
"app": "youle",
|
||||
"route": 'jinxianmj',
|
||||
"rpc": "sieves",
|
||||
"data": {
|
||||
"agentid": o_room.o_game.o_agent.agentid,
|
||||
"gameid": o_room.o_game.gameid,
|
||||
"roomcode": o_room.roomcode,
|
||||
"seat": 0,
|
||||
}
|
||||
}
|
||||
playerRoom.offline_alltimer=setInterval(mod_jxmj.jxUtil.offline_alltimer,1000,o_room,playerRoom,pack);
|
||||
playerRoom.offlinetime=0;
|
||||
}
|
||||
//console.log("makewar");
|
||||
return 1;
|
||||
};
|
||||
//初始化所有数据
|
||||
mod_jxmj.ini = function (playerRoom, o_room) {
|
||||
mod_jxmj.ini_room_pack(playerRoom, o_room);//房间内存
|
||||
mod_jxmj.ini_player_pack(playerRoom, o_room);//用户内存
|
||||
mod_jxmj.ini_save_pack(playerRoom, o_room);//保存用户战绩
|
||||
mod_jxmj.ini_card_pack(playerRoom, o_room);//牌内存
|
||||
mod_jxmj.ini_ctrl_pack(playerRoom, o_room);//控制内存
|
||||
mod_jxmj.ini_record_pack(playerRoom, o_room);//记录
|
||||
mod_jxmj.ini_law_sp_pack(playerRoom, o_room);//特别玩法
|
||||
}
|
||||
|
||||
mod_jxmj.send_to_self=function(playerRoom,o_room,rpc,who,obj) {
|
||||
var pack = {
|
||||
"app": "youle",
|
||||
"route": 'jinxianmj',
|
||||
"rpc": rpc,
|
||||
"conmode":o_room.seatlist[who]&&o_room.seatlist[who].conmode,
|
||||
"fromid":o_room.seatlist[who]&&o_room.seatlist[who].fromid,
|
||||
"data": {
|
||||
"agentid": o_room.o_game.o_agent.agentid,
|
||||
"gameid": o_room.o_game.gameid,
|
||||
"playerid": o_room.seatlist[who]&&o_room.seatlist[who].playerid,
|
||||
"roomcode": o_room.roomcode,
|
||||
"seat": who,
|
||||
}
|
||||
}
|
||||
for (var op in obj){
|
||||
op && (pack.data[op]=obj[op])
|
||||
}
|
||||
mod_jxmj[rpc] && mod_jxmj[rpc](pack);
|
||||
}
|
||||
180
codes/games/server/games/jinxian_mj/mem/mem_ini_card.js
Normal file
180
codes/games/server/games/jinxian_mj/mem/mem_ini_card.js
Normal file
@@ -0,0 +1,180 @@
|
||||
mod_jxmj.ini_card_pack = function (playerRoom, o_room) {
|
||||
playerRoom.poker = playerRoom.poker || []; //牌墙
|
||||
playerRoom.hand = playerRoom.hand || []; //用户牌
|
||||
for (var i = 0; i < 4; i++) {
|
||||
playerRoom.hand[i] = playerRoom.hand[i] || [[]];
|
||||
}
|
||||
playerRoom.hand_arrow = playerRoom.hand_arrow || []; //吃碰哪家 哪张牌
|
||||
for (var i = 0; i < 4; i++) {
|
||||
playerRoom.hand_arrow[i] = playerRoom.hand_arrow[i] || [];
|
||||
}
|
||||
|
||||
//万能牌
|
||||
playerRoom.jing = playerRoom.jing || []; //癞子
|
||||
playerRoom.jing_pre = playerRoom.jing_pre || []; //上局癞子
|
||||
playerRoom.jing_diao = playerRoom.jing_diao || 0;
|
||||
playerRoom.jing_deguo = playerRoom.jing_deguo || [0, 0, 0, 0];
|
||||
playerRoom.jing_reduce = playerRoom.jing_reduce || 0; //还原
|
||||
playerRoom.putJing = playerRoom.putJing || [0, 0, 0, 0]; //是否博精
|
||||
|
||||
//打出的牌
|
||||
playerRoom.sea = playerRoom.sea || []; //4家打出的所有牌
|
||||
for (var i = 0; i < 4; i++) {
|
||||
playerRoom.sea[i] = playerRoom.sea[i] || [];
|
||||
}
|
||||
playerRoom.throw_card = playerRoom.throw_card || 0; //最近打出的1张牌
|
||||
playerRoom.sea_hua = playerRoom.sea_hua || [];
|
||||
playerRoom.hua_pai = playerRoom.hua_pai || [0, 0, 0, 0]; //各家花牌的数量
|
||||
playerRoom.last_hua = playerRoom.last_hua || [-1, 0, -1];
|
||||
playerRoom.sea_chu = playerRoom.sea_chu || [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]; //每轮自己过后最近出的牌
|
||||
//胡的牌
|
||||
playerRoom.hu_card = playerRoom.hu_card || [
|
||||
[0, 0],
|
||||
[0, 0],
|
||||
[0, 0],
|
||||
[0, 0]
|
||||
]; //胡的牌、胡的牌的原来位置
|
||||
playerRoom.hu_card1 = playerRoom.hu_card1 || [
|
||||
[0, 0],
|
||||
[0, 0],
|
||||
[0, 0],
|
||||
[0, 0]
|
||||
]; //胡的牌、胡的牌的原来位置
|
||||
playerRoom.hu_type = playerRoom.hu_type || [
|
||||
[0, 0],
|
||||
[0, 0],
|
||||
[0, 0],
|
||||
[0, 0]
|
||||
];
|
||||
|
||||
playerRoom.hua_shoupai = playerRoom.hua_shoupai || []; //处理花牌之后的手牌,三维数组
|
||||
playerRoom.hua_beginshoupai = playerRoom.hua_beginshoupai || []; //处理花牌之前的手牌,二维数组
|
||||
playerRoom.hua_hua = playerRoom.hua_hua || []; //各家的花牌,三维数组
|
||||
|
||||
playerRoom.hua_huadan = playerRoom.hua_huadan || []; //各家的花牌,二维数组
|
||||
playerRoom.hua_shoupaidan = playerRoom.hua_shoupaidan || []; //处理花牌之后的手牌,二维数组
|
||||
playerRoom.nm_hua = playerRoom.nm_hua || [];
|
||||
|
||||
if (mod_jxmj.config.whohu == 1) {
|
||||
playerRoom.whohu = playerRoom.whohu || [-1, -1, -1, -1];
|
||||
}
|
||||
|
||||
if (mod_jxmj.config.wait_hu == 1) {
|
||||
playerRoom.wait_hu = playerRoom.wait_hu || [0, 0, 0, 0];//记录是否可以胡牌,有牌可以胡时没有胡则当前不能再胡
|
||||
playerRoom.can_hu = playerRoom.can_hu || [[],[],[],[]];//记录是否可以胡牌,有牌可以胡时没有胡则当前不能再胡
|
||||
|
||||
}
|
||||
if (mod_jxmj.config.jinxian == 1) {
|
||||
playerRoom.wait_pe = playerRoom.wait_pe || [0, 0, 0, 0];//记录
|
||||
playerRoom.can_pe = playerRoom.can_pe||[[],[],[],[]];
|
||||
|
||||
playerRoom.up_jing_pos = playerRoom.up_jing_pos || -1;//下精
|
||||
playerRoom.down_jing_pos = playerRoom.down_jing_pos || -1;//下精
|
||||
|
||||
playerRoom.down_jing = playerRoom.down_jing || [-1, -1];//下精
|
||||
playerRoom.down_score = playerRoom.down_score || [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//下精分数
|
||||
playerRoom.doscore=playerRoom.doscore||[0,0,0,0];
|
||||
playerRoom.up_score = playerRoom.up_score || [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//上精分数
|
||||
playerRoom.upscore=playerRoom.upscore||[0,0,0,0];
|
||||
playerRoom.smile_score = playerRoom.smile_score || [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//傻瓜精分数
|
||||
playerRoom.smile2_score = playerRoom.smile2_score || [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//下精分数
|
||||
playerRoom.smscore=playerRoom.smscore||[0,0,0,0];
|
||||
playerRoom.sm2score=playerRoom.sm2score||[0,0,0,0];
|
||||
playerRoom.bmob_score = playerRoom.bmob_score || [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//下精分数
|
||||
playerRoom.bmscore=playerRoom.bmscore||[0,0,0,0];
|
||||
playerRoom.song_score = playerRoom.song_score || [[{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}], [{
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}], [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}],[{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}]];//下精分数
|
||||
playerRoom.soscore=playerRoom.soscore||[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];
|
||||
//单独保存正精副精个数
|
||||
playerRoom.do_card = playerRoom.do_card||[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.up_card = playerRoom.up_card||[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.sm_card = playerRoom.sm_card||[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.sm2_card = playerRoom.sm2_card||[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.bm_card = playerRoom.bm_card||[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.so_card = playerRoom.so_card||[[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}],
|
||||
[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}],
|
||||
[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}],
|
||||
[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}]];
|
||||
playerRoom.gang_score=playerRoom.gang_score||[0,0,0,0];
|
||||
playerRoom.huscore=playerRoom.huscore||[0,0,0,0];
|
||||
playerRoom.alldownscore=playerRoom.alldownscore||[0,0,0,0];
|
||||
|
||||
playerRoom.last_up_jing = playerRoom.last_up_jing || [-1, -1];//上局的上精
|
||||
playerRoom.last_down_jing = playerRoom.last_down_jing || [-1, -1];//上局的上精
|
||||
|
||||
playerRoom.seive=playerRoom.seive||[0,0];//当前筛子
|
||||
playerRoom.sieve_get=playerRoom.sieve_get||[-1,-1,0,0,0];
|
||||
playerRoom.sieve_count=playerRoom.sieve_count||[0,0,0,0,0,0];
|
||||
playerRoom.seives = playerRoom.seives || [];//无限发电用的筛子
|
||||
playerRoom.ok = playerRoom.ok || [0, 0, 0, 0];//固定发电的轮换
|
||||
playerRoom.sieves_num = playerRoom.sieves_num || 0;//开局投掷筛子的进度条
|
||||
playerRoom.jinghu= playerRoom.jinghu||[0, 0, 0, 0];
|
||||
|
||||
playerRoom.robot_put = playerRoom.robot_put||0;
|
||||
|
||||
playerRoom.baoting= playerRoom.baoting||[0, 0, 0, 0];
|
||||
|
||||
playerRoom.offline=playerRoom.offline || [0,0,0,0];
|
||||
playerRoom.offline_timer=playerRoom.offline_timer || [-1,-1,-1,-1];
|
||||
playerRoom.offlinetime=playerRoom.offlinetime || 0;
|
||||
playerRoom.baotingtime=playerRoom.baotingtime || 0;
|
||||
playerRoom.offline_alltimer=playerRoom.offline_alltimer || -1;
|
||||
playerRoom.offline_anytime=playerRoom.offline_anytime || [0,0,0,0];
|
||||
playerRoom.mopai_timer =playerRoom.mopai_timer || [-1,-1,-1,-1];
|
||||
playerRoom.robot_count =playerRoom.robot_count || [0,0,0,0];
|
||||
playerRoom.new_one =playerRoom.new_one || [1,1,1,1];
|
||||
playerRoom.person_info =playerRoom.person_info || [];
|
||||
|
||||
playerRoom.already_operate =playerRoom.already_operate || 0;
|
||||
playerRoom.kick_seat =playerRoom.kick_seat || [0,0,0,0];
|
||||
}
|
||||
}
|
||||
45
codes/games/server/games/jinxian_mj/mem/mem_ini_ctrl.js
Normal file
45
codes/games/server/games/jinxian_mj/mem/mem_ini_ctrl.js
Normal file
@@ -0,0 +1,45 @@
|
||||
mod_jxmj.ini_ctrl = function(playerRoom,o_room){
|
||||
mod_jxmj.put_operate_ctrl=0;//服务器自动打控制
|
||||
|
||||
playerRoom.online_undo_time=[0,0,0,0];
|
||||
playerRoom.online_undo=[0,0,0,0];
|
||||
}
|
||||
mod_jxmj.ini_ctrl_pack = function(playerRoom,o_room){mod_jxmj.ini_ctrl(playerRoom,o_room);
|
||||
playerRoom.user_ctrl=playerRoom.user_ctrl || [0,0,0,-1,0,0,0,0,0,-1,0,0,-1]//8下次要摸得牌的位置,3下次要摸得牌,10控制权是否变动,11倒计时,12控制权是否变动的参照
|
||||
playerRoom.user_eat_bump=playerRoom.user_eat_bump || [[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]];//是否可杠碰吃、自摸杠、暗杠、5胡(1吃胡2自摸胡3抢杠胡)、6听、7要
|
||||
playerRoom.yaopai=playerRoom.yaopai || [-1];//要海底的用户的位置
|
||||
playerRoom.operate_hu_note=playerRoom.operate_hu_note || [[0,0],[0,0],[0,0],[0,0]];
|
||||
|
||||
//长沙麻将杠牌控制
|
||||
playerRoom.put_tail_poker=playerRoom.put_tail_poker || [0];//是否出掉尾牌
|
||||
playerRoom.tail_ctrl=playerRoom.tail_ctrl || [0];//尾牌动画控制
|
||||
playerRoom.tail_poker=playerRoom.tail_poker || [-1,-1,-1,-1,-1,-1,-1,-1,-1];//0尾牌的位置,1杠补牌1的位置,2杠补牌2的位置,3杠补牌1,4杠补牌2,5筛子1,6筛子2,7补张/杠,8座位
|
||||
playerRoom.tail_poker_hu=playerRoom.tail_poker_hu || [-1,0,[-1,-1,-1,-1],0,[-1,-1,-1,-1]];//胡牌0,[胡牌座位],胡牌1,[胡牌座位]
|
||||
|
||||
//流程记录,临时记录
|
||||
playerRoom.guopai=playerRoom.guopai || [0,0,0,0];
|
||||
playerRoom.guopeng=playerRoom.guopeng || [];//过手吃
|
||||
playerRoom.guohu=playerRoom.guohu || [];//过手胡
|
||||
playerRoom.guohu_point=playerRoom.guohu_point || [0,0,0,0];//过手胡的分
|
||||
playerRoom.chu_record=playerRoom.chu_record || [-1,-1];//临时出的记录 seat,put_pos
|
||||
playerRoom.chi_record=playerRoom.chi_record || [-1,[-1],0,-1];//临时动作吃的记录
|
||||
playerRoom.peng_record=playerRoom.peng_record || [[-1,[-1],0,[0,0,0],-1],[-1,[-1],0,[0,0,0],-1],[-1,[-1],0,[0,0,0],-1],[-1,[-1],0,[0,0,0],-1]];//临时动作吃的记录
|
||||
playerRoom.zimo_record=playerRoom.zimo_record || [-1,-1,-1];//临时动作自摸的记录
|
||||
playerRoom.record_ctrl_pos=playerRoom.record_ctrl_pos || [-1,0];//多个操作中的有效操作
|
||||
playerRoom.hu_sum=playerRoom.hu_sum || [0,0,0,0];//各家胡的次数
|
||||
playerRoom.hu_lose = playerRoom.hu_lose || [0, 0, 0, 0];//各家输的次数
|
||||
playerRoom.gold_account_lose = {"0":{total:0,lose:0},"1":{total:0,lose:0},"2":{total:0,lose:0},"3":{total:0,lose:0}};
|
||||
|
||||
|
||||
//自动人
|
||||
playerRoom.robot=playerRoom.robot || [-1,-1,-1,-1];
|
||||
playerRoom.put_operate_ctrl=playerRoom.put_operate_ctrl || -1;//服务器自动打控制
|
||||
playerRoom.timer=playerRoom.timer || [-1,-1,-1,-1];//定时器
|
||||
playerRoom.start_player=playerRoom.start_player || [0,0,0,0];//定时器相关
|
||||
|
||||
playerRoom.kick_timer=playerRoom.kick_timer || [-1,-1,-1,-1];//踢人相关
|
||||
playerRoom.ready_timer=playerRoom.ready_timer || [-1,-1,-1,-1];//踢人相关
|
||||
|
||||
playerRoom.hu_timer=playerRoom.hu_timer || [0,0,0,0];//自动胡相关
|
||||
playerRoom.put_number=playerRoom.put_number || [0,0,0,0];//自动胡相关
|
||||
}
|
||||
12
codes/games/server/games/jinxian_mj/mem/mem_ini_law_sp.js
Normal file
12
codes/games/server/games/jinxian_mj/mem/mem_ini_law_sp.js
Normal file
@@ -0,0 +1,12 @@
|
||||
mod_jxmj.ini_law_sp_pack= function(playerRoom,o_room){
|
||||
//开局飘玩法
|
||||
playerRoom.piao=playerRoom.piao || [-1,-1,-1,-1];//飘
|
||||
playerRoom.act_piao=playerRoom.act_piao || [-1,-1,0,[-1],-1];
|
||||
playerRoom.lan_pai=playerRoom.lan_pai || [-1];
|
||||
//结算买马
|
||||
playerRoom.buyHorse=playerRoom.buyHorse || [[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0]];//各家买马
|
||||
playerRoom.winHorse=playerRoom.winHorse || [[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]];//各家中马
|
||||
playerRoom.Horse_vic_def=playerRoom.Horse_vic_def || [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];//各家计算马
|
||||
//承包玩法
|
||||
playerRoom.contract=playerRoom.contract || [[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1]];//被谁承包了
|
||||
}
|
||||
16
codes/games/server/games/jinxian_mj/mem/mem_ini_player.js
Normal file
16
codes/games/server/games/jinxian_mj/mem/mem_ini_player.js
Normal file
@@ -0,0 +1,16 @@
|
||||
mod_jxmj.ini_player_pack = function(playerRoom,o_room){
|
||||
playerRoom.host=playerRoom.host || [];//每局庄
|
||||
playerRoom.host_clicknum=playerRoom.host_clicknum || 0;//庄点击次数
|
||||
playerRoom.identity=playerRoom.identity || [0,-1,-1,-1,0];//每局风向、庄
|
||||
playerRoom.ting_status=playerRoom.ting_status || [0,0,0,0];//听牌状态
|
||||
playerRoom.start_hu=playerRoom.start_hu || [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]];//长沙起手胡
|
||||
playerRoom.start_hu_card=playerRoom.start_hu_card || [[0],[0],[0],[0]];//起手胡的牌
|
||||
playerRoom.final_hu=playerRoom.final_hu || [-1,[0,0],-1];//最终胡:座位、胡的牌、胡的类型
|
||||
playerRoom.many_hu=playerRoom.many_hu || [[-1,[0,0],[0]],[-1,[0,0],[0]]];//多响:座位、胡的牌、胡的类型
|
||||
playerRoom.hu_ready=playerRoom.hu_ready || [0];
|
||||
playerRoom.statis=playerRoom.statis || [];//大结算统计:自摸、接炮、点炮、暗杠、明杠
|
||||
for(var i=0;i<5;i++)
|
||||
{playerRoom.statis[i]=playerRoom.statis[i] || [0,0,0,0,0,0];
|
||||
}
|
||||
playerRoom.playerids=playerRoom.playerids || [];//本小局用户id
|
||||
}
|
||||
365
codes/games/server/games/jinxian_mj/mem/mem_ini_re.js
Normal file
365
codes/games/server/games/jinxian_mj/mem/mem_ini_re.js
Normal file
@@ -0,0 +1,365 @@
|
||||
//设置各个用户的各种初始状态,当每次开始一个小局时执行,每小局只执行1次
|
||||
mod_jxmj.set_identity_ini = function (playerRoom, o_room) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
if (mod_jxmj.config.whohu == 1) {
|
||||
playerRoom.whohu = [-1, -1, -1, -1];
|
||||
}
|
||||
playerRoom.online_undo_time=[0,0,0,0];
|
||||
playerRoom.online_undo=[0,0,0,0];
|
||||
if (mod_jxmj.config.wait_hu == 1) {
|
||||
playerRoom.wait_hu = [0, 0, 0, 0];//记录是否可以胡牌,有牌可以胡时没有胡则当前不能再胡
|
||||
playerRoom.can_hu = [[], [], [], []];
|
||||
}
|
||||
if (mod_jxmj.config.jinxian == 1) {
|
||||
playerRoom.wait_pe = [0, 0, 0, 0];//记录
|
||||
playerRoom.can_pe = [[], [], [], []];
|
||||
|
||||
playerRoom.up_jing_pos = -1;//下精
|
||||
playerRoom.down_jing_pos = -1;//下精
|
||||
|
||||
playerRoom.down_jing = [-1, -1];//下精
|
||||
playerRoom.up_score = [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//上精分数
|
||||
playerRoom.down_score = [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//下精分数
|
||||
playerRoom.smile_score = [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//下精分数
|
||||
playerRoom.smile2_score = [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//下精分数
|
||||
playerRoom.bmob_score = [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}];//下精分数
|
||||
//playerRoom.song_score ||
|
||||
playerRoom.song_score = [[{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}], [{
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}], [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}], [{score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {
|
||||
score: 0,
|
||||
cards: [],
|
||||
king: 0,
|
||||
go: 0,zj:0,fj:0
|
||||
}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}, {score: 0, cards: [], king: 0, go: 0,zj:0,fj:0}]];//下精分数
|
||||
// playerRoom.last_up_jing=[-1,-1];//上局的上精
|
||||
|
||||
playerRoom.doscore = [0, 0, 0, 0];
|
||||
playerRoom.upscore = [0, 0, 0, 0];
|
||||
playerRoom.smscore = [0, 0, 0, 0];
|
||||
playerRoom.sm2score = [0, 0, 0, 0];
|
||||
playerRoom.bmscore = [0, 0, 0, 0];
|
||||
playerRoom.soscore = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];
|
||||
playerRoom.gang_score = [0, 0, 0, 0];
|
||||
playerRoom.huscore = [0, 0, 0, 0];
|
||||
playerRoom.alldownscore = [0, 0, 0, 0];
|
||||
|
||||
//单独保存正精副精个数
|
||||
playerRoom.do_card = [{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.up_card = [{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.sm_card = [{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.sm2_card = [{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.bm_card = [{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}];
|
||||
playerRoom.so_card = [[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}],
|
||||
[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}],
|
||||
[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}],
|
||||
[{cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}, {cards:[],zj:0,fj:0}]];
|
||||
|
||||
playerRoom.record_king = [0, 0, 0, 0, 0];//自摸次数,打胡次数,上精次数,下精次数,回头次数
|
||||
|
||||
playerRoom.seives = [];
|
||||
playerRoom.seive = [0, 0];
|
||||
playerRoom.ok = [0, 0, 0, 0];
|
||||
playerRoom.sieves_num = 0;//固定发电的轮换
|
||||
playerRoom.sieve_get = [-1, -1, 0, 0, 0];
|
||||
playerRoom.sieve_count=[0,0,0,0,0,0];
|
||||
playerRoom.jinghu = [0, 0, 0, 0];
|
||||
|
||||
playerRoom.robot_put = 0;
|
||||
|
||||
playerRoom.baoting = [0, 0, 0, 0];
|
||||
|
||||
playerRoom.offline=[0,0,0,0];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.offline_timer[i]!=-1){
|
||||
clearInterval(playerRoom.offline_timer[i]);
|
||||
}
|
||||
}
|
||||
playerRoom.offline_timer=[-1,-1,-1,-1];
|
||||
playerRoom.offlinetime= 0;
|
||||
|
||||
playerRoom.offline_anytime=[0,0,0,0];
|
||||
// playerRoom.mopai_time =0;
|
||||
playerRoom.mopai_timer =[-1,-1,-1,-1];
|
||||
playerRoom.robot_count =[0,0,0,0];
|
||||
|
||||
playerRoom.already_operate =0;
|
||||
playerRoom.kick_seat =[0,0,0,0];
|
||||
}
|
||||
|
||||
}
|
||||
//设置庄家
|
||||
mod_jxmj.set_host = function (playerRoom, o_room) {
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
if (playerRoom.turn[1] == 0 || playerRoom.identity[4] == -1)//首局东风当庄
|
||||
{
|
||||
var host = 0;
|
||||
for (var i = 0; i < person; i++) {
|
||||
if (playerRoom.identity[i] == 0) {
|
||||
host = i;
|
||||
}
|
||||
}
|
||||
//host=parseInt(Math.random()*4);host=0;
|
||||
playerRoom.identity[4] = host;
|
||||
}
|
||||
else {
|
||||
var ban = 0;
|
||||
//var dianpao=playerRoom.last_operate[2];
|
||||
var dianpao = playerRoom.hu_note[0];
|
||||
if (dianpao > 0) {
|
||||
var hu_ord = [];//优先胡牌顺序
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var j = i + dianpao - 1;
|
||||
if (j < 0) {
|
||||
j = j + 4;
|
||||
}
|
||||
else if (j > 3) {
|
||||
j = j - 4;
|
||||
}
|
||||
hu_ord[i] = j;
|
||||
}
|
||||
// if(playerRoom.many_hu[0][0]>=0 && playerRoom.many_hu[0][0]<4)//1炮多响
|
||||
// {playerRoom.identity[4]=dianpao-1;//1炮多响后点炮是庄
|
||||
// ban=1;
|
||||
// }
|
||||
// if(ban==0)
|
||||
// {
|
||||
// for(var i=0;i<4;i++)
|
||||
// {
|
||||
// if(playerRoom.hu_note[7][hu_ord[i]]>-1)
|
||||
// {playerRoom.identity[4]=dianpao-1;//抢杠胡后点炮是庄
|
||||
// ban=1;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
// if (ban == 0 && playerRoom.final_hu[0] < 4) {
|
||||
// playerRoom.identity[4] = playerRoom.final_hu[0];
|
||||
// }//谁赢谁是庄
|
||||
|
||||
// else if(ban==0 && playerRoom.final_hu[0]==4)
|
||||
// {
|
||||
if (playerRoom.final_hu[0] <= 4) {
|
||||
var last_host = playerRoom.identity[4];
|
||||
if (playerRoom.final_hu[0] == last_host) {
|
||||
playerRoom.identity[4] = last_host;
|
||||
} else {
|
||||
last_host += 1;
|
||||
if (last_host > (person - 1)) {
|
||||
last_host = 0;
|
||||
}
|
||||
playerRoom.identity[4] = last_host;
|
||||
}
|
||||
}
|
||||
//if(playerRoom.yaopai[0]>-1)
|
||||
//{playerRoom.identity[4]=playerRoom.yaopai[0];}//长沙要牌当庄
|
||||
// }
|
||||
// var last_host = playerRoom.identity[4];
|
||||
// var change = 0;
|
||||
// if (ban == 0 && playerRoom.final_hu[0] < 4) {
|
||||
// if (playerRoom.final_hu[0] != last_host) {
|
||||
// change = 1;
|
||||
// }
|
||||
// }//谁赢谁是庄
|
||||
// else if (ban == 0 && playerRoom.final_hu[0] == 4) {
|
||||
// change = 1;
|
||||
// }
|
||||
// if (change == 1) {
|
||||
// last_host += 1;
|
||||
// if (last_host > person - 1) {
|
||||
// last_host = 0;
|
||||
// }
|
||||
// playerRoom.identity[4] = last_host;//烂庄轮庄
|
||||
// }
|
||||
}
|
||||
if (playerRoom.identity[4] == -1) {
|
||||
playerRoom.identity[4] = 0;
|
||||
}
|
||||
var host = playerRoom.identity[4];
|
||||
return host;
|
||||
}
|
||||
//设置各个用户的各种初始状态,当每次开始一个小局时执行,每小局只执行1次
|
||||
mod_jxmj.set_identity = function (playerRoom, o_room) {
|
||||
mod_jxmj.set_identity_ini(playerRoom, o_room);
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[playerRoom.roomtype[6]] || 4;
|
||||
//playerRoom.identity=[-1,-1,-1,-1,-1];//0-3风向,4,庄的位置
|
||||
if (playerRoom.identity[0] == -1) {
|
||||
var wind = parseInt(Math.random() * person);//东南西北
|
||||
wind = 0;
|
||||
playerRoom.identity[0] = wind;
|
||||
for (var i = 1; i < 4; i++) {
|
||||
wind = wind + 1;
|
||||
if (wind > 3) {
|
||||
wind -= 4;
|
||||
}
|
||||
playerRoom.identity[i] = wind;
|
||||
}
|
||||
}
|
||||
var host = mod_jxmj.set_host(playerRoom, o_room);//设置庄家
|
||||
playerRoom.sound = 0;
|
||||
//playerRoom.identity_s[playerRoom.turn[1]] = ExArray.copyArray(playerRoom.identity);
|
||||
playerRoom.playerids = [];//本小局用户id
|
||||
for (var i = 0; i < person; i++) {
|
||||
playerRoom.playerids[i] = o_room.seatlist[i].playerid;
|
||||
}
|
||||
playerRoom.hand_arrow = [];//吃碰哪家 哪张牌
|
||||
for (var i = 0; i < 4; i++) {
|
||||
playerRoom.hand_arrow[i] = [];
|
||||
}
|
||||
var turn = playerRoom.turn[1];
|
||||
if (turn > 0) {
|
||||
playerRoom.jing_pre[0] = playerRoom.jing[0];//上局癞子
|
||||
playerRoom.jing_pre[1] = playerRoom.jing[1];
|
||||
}
|
||||
playerRoom.jing = [];
|
||||
playerRoom.jing_reduce = 0;//还原
|
||||
playerRoom.jing_diao = 0;
|
||||
playerRoom.jing_deguo = [0, 0, 0, 0];
|
||||
playerRoom.user_point = playerRoom.user_point || [0, 0, 0, 0];//各用户累积分数
|
||||
if (o_room.infinite && o_room.infinite == 1) {
|
||||
playerRoom.turn_point = [];
|
||||
}
|
||||
playerRoom.turn_point[playerRoom.turn[1]] = [0, 0, 0, 0];//各用户累积分数
|
||||
playerRoom.user_ctrl = [0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0, -1];
|
||||
playerRoom.user_ctrl[1] = -1;//上次谁得到控制权
|
||||
playerRoom.user_ctrl[2] = playerRoom.identity[4];//当前谁得到控制权
|
||||
playerRoom.put_tail_poker = [0];//是否出掉尾牌
|
||||
playerRoom.tail_poker = [-1, -1, -1, -1, -1, -1, -1, -1, -1];//0尾牌的位置,1杠补牌1的位置,2杠补牌2的位置,3杠补牌1,4杠补牌2,5筛子1,6筛子2,7补张/杠,8座位
|
||||
playerRoom.tail_poker_hu = [-1, 0, [-1, -1, -1, -1], 0, [-1, -1, -1, -1]];//胡牌0,[胡牌座位],胡牌1,[胡牌座位]
|
||||
playerRoom.tail_ctrl = [0];//尾牌动画控制
|
||||
playerRoom.user_eat_bump = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]];//是否可杠碰吃、自摸杠、暗杠、5胡(1吃胡2自摸胡3抢杠胡)、6听、7要
|
||||
playerRoom.yaopai = playerRoom.yaopai || [-1];//要海底的用户的位置
|
||||
playerRoom.operate_hu_note = [[0, 0], [0, 0], [0, 0], [0, 0]];
|
||||
playerRoom.throw_card = 0;
|
||||
playerRoom.hu_card = [[0, 0], [0, 0], [0, 0], [0, 0]];//胡的牌、胡的牌的原来位置
|
||||
playerRoom.hu_card1 = [[0, 0], [0, 0], [0, 0], [0, 0]];//胡的牌、胡的牌的原来位置
|
||||
playerRoom.hua_pai = [0, 0, 0, 0];//各家花牌的数量
|
||||
playerRoom.buyHorse = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];//各家买马
|
||||
playerRoom.winHorse = [[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]];//各家中马
|
||||
playerRoom.Horse_vic_def = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];//各家买马
|
||||
playerRoom.contract = [[-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1]];//被谁承包了
|
||||
playerRoom.last_operate = [-1, 0, host];
|
||||
playerRoom.lastbar = [-1, 0, 0];//上个操作是否是谁杠、0普通杠/1自摸杠
|
||||
playerRoom.sea = [];
|
||||
playerRoom.sea[0] = [];
|
||||
playerRoom.sea[1] = [];
|
||||
playerRoom.sea[2] = [];
|
||||
playerRoom.sea[3] = [];//牌池
|
||||
playerRoom.sea_chu = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]; //每轮自己过后最近出的牌
|
||||
playerRoom.sea_hua = [];
|
||||
playerRoom.sea_hua[0] = [];
|
||||
playerRoom.sea_hua[1] = [];
|
||||
playerRoom.sea_hua[2] = [];
|
||||
playerRoom.sea_hua[3] = [];//牌池
|
||||
playerRoom.act = [-1, -1, 0, [-1], -1];
|
||||
playerRoom.act_pai = [-1, -1, 0, -1, -1];//牌的动画[1 put,2peng,3chi,4gang,5hu ,本次操作的座位,上个操作的牌,上个操作的牌池/自摸杠的座位]
|
||||
playerRoom.act_chao_host = [0, 0];//抄庄烂庄计时器
|
||||
playerRoom.ag = [];//已经亮的暗杠的牌值
|
||||
for (var i = 0; i < 4; i++) {
|
||||
playerRoom.ag[i] = [];
|
||||
}
|
||||
playerRoom.guopai = [0, 0, 0, 0];
|
||||
playerRoom.guopeng = [];//过手吃
|
||||
playerRoom.guohu = [];//过手胡
|
||||
for (var i = 0; i < 4; i++) {
|
||||
playerRoom.guopeng[i] = [];
|
||||
playerRoom.guohu[i] = [];
|
||||
}
|
||||
playerRoom.guohu_point = [0, 0, 0, 0];//过手胡的分
|
||||
playerRoom.chu_record = [-1, -1];//临时出的记录 seat,put_pos
|
||||
playerRoom.chi_record = [-1, [-1], 0, -1];//临时动作吃的记录
|
||||
playerRoom.peng_record = [[-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1], [-1, [-1], 0, [0, 0, 0], -1]];//临时动作碰的记录
|
||||
playerRoom.zimo_record = [-1, -1, -1, -1];//临时动作自摸的记录
|
||||
playerRoom.record_ctrl_pos = [-1, 0];//多个操作中的有效操作
|
||||
playerRoom.ting_status = [0, 0, 0, 0];//听牌状态
|
||||
playerRoom.start_hu = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];//长沙起手胡
|
||||
playerRoom.start_hu_card = [[0], [0], [0], [0]];//起手胡的牌
|
||||
playerRoom.final_hu = [-1, [0, 0], -1];//最终胡:座位、胡的牌、胡的类型
|
||||
playerRoom.many_hu = [[-1, [0, 0], -1], [-1, [0, 0], -1]];//多响:座位、胡的牌、胡的类型
|
||||
playerRoom.hu_ready = 0;
|
||||
playerRoom.peng_chi_num = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];//被每个座位碰吃杠的次数
|
||||
playerRoom.hu_note = [-1, -1, -1, -1, -1, [-1, -1, -1, -1], [-1, -1, []], [-1, -1, -1, -1], -1, -1, -1, -1];//0自摸1真胡2天胡3杠花4抄庄5海底胡6杠上炮(谁杠,杠状态,杠炮胡家)7抢杠胡8地杠9剩15张点炮全包10抢杠包11杠尾
|
||||
playerRoom.hu_note_gang = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]];
|
||||
//明杠、自摸杠、暗杠、点杠、被加杠、被暗杠
|
||||
playerRoom.hu_note_gang_jing = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];//明精杠、暗精杠、被明精杠、被暗精杠
|
||||
playerRoom.putJing = [0, 0, 0, 0];//是否博精
|
||||
playerRoom.an_gang_num = [0, 0, 0, 0];
|
||||
playerRoom.rep = [];
|
||||
playerRoom.p = [];
|
||||
mod_jxmj.put_operate_ctrl = 0;//服务器自动打控制
|
||||
|
||||
playerRoom.hu_timer = [0, 0, 0, 0];//自动胡相关
|
||||
playerRoom.put_number = [0, 0, 0, 0];//自动胡相关
|
||||
//初级场,中级场概率
|
||||
var min_timer=[0,4,5,6,6,7,7,8][(parseInt(Math.random()*8))];//最小场数
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.robot[i] > -1) {
|
||||
if (playerRoom.config.gold_zu==1){
|
||||
var hu_double=15;
|
||||
var hu_d=2;
|
||||
}else if (playerRoom.config.gold_zu==2){
|
||||
var hu_double=10;
|
||||
var hu_d=2;
|
||||
}
|
||||
playerRoom.hu_timer[i] = parseInt(Math.random() * hu_double) + 1;
|
||||
if (playerRoom.hu_timer[i] < 4 && parseInt(Math.random() * hu_d) != 0) {
|
||||
playerRoom.hu_timer[i] += 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (playerRoom.robot[i] > -1) {
|
||||
if (playerRoom.hu_timer[i] < min_timer) {
|
||||
playerRoom.hu_timer[i] = min_timer+parseInt(Math.random() * 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
codes/games/server/games/jinxian_mj/mem/mem_ini_record.js
Normal file
17
codes/games/server/games/jinxian_mj/mem/mem_ini_record.js
Normal file
@@ -0,0 +1,17 @@
|
||||
mod_jxmj.ini_record_pack = function(playerRoom,o_room){
|
||||
playerRoom.last_operate=playerRoom.last_operate || [-1,0,-1];//最近的操作
|
||||
playerRoom.lastbar=playerRoom.lastbar || [-1,0,0];//上个自摸杠操作是否是谁杠、0普通杠/1自摸杠、几个
|
||||
|
||||
playerRoom.peng_chi_num=playerRoom.peng_chi_num || [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];//被每个座位碰吃杠的次数
|
||||
playerRoom.hu_note=playerRoom.hu_note || [-1,-1,-1,-1,-1,[-1,-1,-1,-1],[-1,-1,[]],[-1,-1,-1,-1],-1,-1,-1,-1];//0自摸(0自摸1-4点炮)1真胡2天胡3杠花4抄庄5海底胡6杠上炮(谁杠,杠状态,杠炮胡家)7抢杠胡8地杠9剩15张点炮全包10抢杠包11杠尾
|
||||
playerRoom.hu_note_gang=playerRoom.hu_note_gang || [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]];//明杠、自摸杠、暗杠、点杠、被加杠、被暗杠
|
||||
playerRoom.hu_note_gang_jing=playerRoom.hu_note_gang_jing || [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];//明精杠、暗精杠、被明精杠、被暗精杠
|
||||
playerRoom.an_gang_num=playerRoom.an_gang_num || [0,0,0,0];//暗杠数量
|
||||
playerRoom.ag=playerRoom.ag || [];//已经亮的暗杠的牌值
|
||||
|
||||
//动画记录
|
||||
playerRoom.act=playerRoom.act || [-1,-1,0,[-1],-1];//动作,座位,计时,相关手牌,哪个牌池
|
||||
playerRoom.act_pai=playerRoom.act_pai || [-1,-1,0,-1,-1];//牌的动画[1 put,2peng,3chi,4gang,5hu ,本次操作的座位,上个操作的牌,上个操作的牌池/自摸杠的座位]
|
||||
playerRoom.act_chao_host=playerRoom.act_chao_host || [0,0];//抄庄烂庄计时器
|
||||
|
||||
}
|
||||
20
codes/games/server/games/jinxian_mj/mem/mem_ini_room.js
Normal file
20
codes/games/server/games/jinxian_mj/mem/mem_ini_room.js
Normal file
@@ -0,0 +1,20 @@
|
||||
mod_jxmj.ini_room_pack = function (playerRoom, o_room) {
|
||||
playerRoom = playerRoom || {};
|
||||
playerRoom.sound = playerRoom.sound || 0;
|
||||
playerRoom.roomtype = ExArray.copyArray(o_room.roomtype);//14游戏类型(1红中 2抚州 a3抚州马 3南昌)
|
||||
playerRoom.agree = playerRoom.agree || [-1, -1, -1, -1];
|
||||
playerRoom.save = playerRoom.save || 0;//是否保存战绩
|
||||
playerRoom.status = playerRoom.status || 0;//遊戲狀態
|
||||
playerRoom.turn = playerRoom.turn || [0, 0, 0];//每局间隔控制
|
||||
if (playerRoom.turn[2] == 0) {
|
||||
playerRoom.turn[2] = o_room.asetcount;
|
||||
}
|
||||
playerRoom.user_point = playerRoom.user_point || [0, 0, 0, 0];//各用户累积分数
|
||||
playerRoom.turn_point = playerRoom.turn_point || [];//各用户累积分数
|
||||
playerRoom.addr = playerRoom.addr || [];
|
||||
playerRoom.ip = playerRoom.ip || [];
|
||||
playerRoom.rep_num = playerRoom.rep_num || [-1];
|
||||
playerRoom.rep = playerRoom.rep || [];
|
||||
playerRoom.p = playerRoom.p || [];
|
||||
|
||||
}
|
||||
62
codes/games/server/games/jinxian_mj/mem/mem_ini_save.js
Normal file
62
codes/games/server/games/jinxian_mj/mem/mem_ini_save.js
Normal file
@@ -0,0 +1,62 @@
|
||||
mod_jxmj.ini_save_pack = function (playerRoom, o_room) {
|
||||
|
||||
playerRoom.down_jing_s = playerRoom.down_jing_s||[];//下精
|
||||
playerRoom.doscore_s=playerRoom.doscore_s||[];
|
||||
playerRoom.upscore_s=playerRoom.upscore_s||[];
|
||||
playerRoom.smscore_s=playerRoom.smscore_s||[];
|
||||
playerRoom.bmscore_s=playerRoom.bmscore_s||[];
|
||||
playerRoom.soscore_s=playerRoom.soscore_s||[];
|
||||
playerRoom.gang_score_s=playerRoom.gang_score_s||[];
|
||||
playerRoom.huscore_s=playerRoom.huscore_s||[];;
|
||||
playerRoom.alldownscore_s=playerRoom.alldownscore_s||[];
|
||||
playerRoom.do_card_s = playerRoom.do_card_s||[];
|
||||
playerRoom.up_card_s = playerRoom.up_card_s||[];
|
||||
playerRoom.sm_card_s = playerRoom.sm_card_s||[];
|
||||
playerRoom.sm2_card_s = playerRoom.sm2_card_s||[];
|
||||
playerRoom.bm_card_s = playerRoom.bm_card_s||[];
|
||||
playerRoom.so_card_s = playerRoom.so_card_s||[];
|
||||
playerRoom.last_up_jing_s = playerRoom.last_up_jing_s||[];
|
||||
playerRoom.last_down_jing_s = playerRoom.last_down_jing_s||[];
|
||||
|
||||
playerRoom.gang_score_s=playerRoom.gang_score_s||[];
|
||||
|
||||
playerRoom.turn_point_s = playerRoom.turn_point_s || [];
|
||||
playerRoom.identity_s = playerRoom.identity_s || [];
|
||||
playerRoom.hand_s = playerRoom.hand_s || [];
|
||||
playerRoom.hu_note_s = playerRoom.hu_note_s || [];
|
||||
playerRoom.hu_note_gang_s = playerRoom.hu_note_gang_s || [];
|
||||
playerRoom.buyHorse_s = playerRoom.buyHorse_s || [];
|
||||
playerRoom.winHorse_s = playerRoom.winHorse_s || [];
|
||||
playerRoom.Horse_vic_def_s = playerRoom.Horse_vic_def_s || [];
|
||||
playerRoom.final_hu_s = playerRoom.final_hu_s || [];
|
||||
playerRoom.many_hu_s = playerRoom.many_hu_s || [];
|
||||
playerRoom.start_hu_s = playerRoom.start_hu_s || [];
|
||||
playerRoom.sea_hua_s = playerRoom.sea_hua_s || [];
|
||||
playerRoom.peng_chi_num_s = playerRoom.peng_chi_num_s || [];
|
||||
playerRoom.putJing_s = playerRoom.putJing_s || [];
|
||||
playerRoom.hu_note_gang_jing_s = playerRoom.peng_chi_num_s || [];
|
||||
playerRoom.jing_s = playerRoom.jing_s || [];
|
||||
playerRoom.jing_reduce_s = playerRoom.jing_reduce_s || [];
|
||||
playerRoom.hand_arrow_s = playerRoom.hand_arrow_s || [];
|
||||
playerRoom.nm_hua_pai_s = playerRoom.nm_hua_pai_s || [];
|
||||
}
|
||||
mod_jxmj.ini_clear_save = function (playerRoom) {
|
||||
playerRoom.turn_point_s = [];
|
||||
playerRoom.identity_s = [];
|
||||
playerRoom.hand_s = [];
|
||||
playerRoom.hu_note_s = [];
|
||||
playerRoom.hu_note_gang_s = [];
|
||||
playerRoom.buyHorse_s = [];
|
||||
playerRoom.winHorse_s = [];
|
||||
playerRoom.Horse_vic_def_s = [];
|
||||
playerRoom.final_hu_s = [];
|
||||
playerRoom.many_hu_s = [];
|
||||
playerRoom.start_hu_s = [];
|
||||
playerRoom.sea_hua_s = [];
|
||||
playerRoom.peng_chi_num_s = [];
|
||||
playerRoom.putJing_s = [];
|
||||
playerRoom.hu_note_gang_jing_s = [];
|
||||
playerRoom.jing_s = [];
|
||||
playerRoom.jing_reduce_s = [];
|
||||
playerRoom.hand_arrow_s = [];
|
||||
}
|
||||
8
codes/games/server/games/jinxian_mj/mem/内存模块.txt
Normal file
8
codes/games/server/games/jinxian_mj/mem/内存模块.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
mem_ini_room房间内存
|
||||
mem_ini_player用户内存
|
||||
mem_ini_save保存用户战绩
|
||||
mem_ini_card牌内存
|
||||
mem_ini_ctrl控制内存
|
||||
mem_ini_record记录
|
||||
mem_ini_law_sp特别玩法
|
||||
mem_ini_re再次设置各种状态的初始化
|
||||
171
codes/games/server/games/jinxian_mj/mod_mj.js
Normal file
171
codes/games/server/games/jinxian_mj/mod_mj.js
Normal file
@@ -0,0 +1,171 @@
|
||||
var mod_jxmj = mod_jxmj || cls_mod.new("mod_jxmj", "jinxianmj", youle_app);//创建本游戏的服务器模块
|
||||
//对内的输入接口类(需要的外部接口)
|
||||
mod_jxmj.import = null;
|
||||
//对内的输出接口类(提供给外部使用的接口)
|
||||
mod_jxmj.export = null;
|
||||
mod_jxmj.a = {};
|
||||
mod_jxmj.b = {};
|
||||
mod_jxmj.roots = "games3/jinxian_mj/";
|
||||
mod_jxmj.route = "jinxianmj";
|
||||
mod_jxmj.count=mod_jxmj.count || 0;
|
||||
mod_jxmj.count = JSON.parse(localStorage.getItem(mod_jxmj.route+"_count")) || 0;
|
||||
min_loadJsFile(mod_jxmj.roots + "ai/ai_deal_card.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "algo/algo.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "Interface/Room.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "util/util.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "util/JinXian_Util.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "config/config.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "mem/mem_ini.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "flow/flow.js", function () {
|
||||
min_loadJsFile(mod_jxmj.roots + "import/import.js", function () {
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
//服务器刷新或重启时,要把上次服务器运行时的内存数据全部恢复,这个函数会在恢复通用数据时执行
|
||||
mod_jxmj.restore_room = function (o_room, o_deskinfo) {
|
||||
//console.log(o_room);
|
||||
if (o_deskinfo) {
|
||||
mod_jxmj.Storage_read();//console.log(o_deskinfo);
|
||||
o_room.o_desk = cls_desk.new(o_room);// 新建牌桌对象
|
||||
var roomcode = o_room.roomcode;
|
||||
mod_jxmj[roomcode] = o_deskinfo;
|
||||
var playerRoom = mod_jxmj[roomcode];
|
||||
playerRoom.time = [];
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[o_room.roomtype[6]] || 4;
|
||||
o_room.seatlist.length = person;
|
||||
if (mod_jxmj[o_room.roomcode].asetlist) ;
|
||||
{
|
||||
var roomcode = o_room.roomcode;
|
||||
o_room.o_desk.data.asetlist = ExArray.copyArray(playerRoom.asetlist);
|
||||
|
||||
var pack = {};
|
||||
pack.data = {};
|
||||
pack.data.agentid = o_room.o_game.o_agent.agentid;
|
||||
pack.data.gameid = o_room.o_game.gameid;
|
||||
pack.data.roomcode = o_room.roomcode;
|
||||
pack.data.playerid = o_room.seatlist[0].playerid;
|
||||
pack.data.seat = 0;
|
||||
pack.conmode = o_room.seatlist[0].conmode;
|
||||
pack.fromid = o_room.seatlist[0].fromid;
|
||||
if (o_room.infinite && o_room.infinite == 1) {
|
||||
playerRoom.timer = playerRoom.timer || [];
|
||||
playerRoom.timer[0] = setInterval(mod_jxmj.put, 1200, pack);
|
||||
playerRoom.timer[1] = setInterval(mod_jxmj.operate, 1200, pack);
|
||||
playerRoom.timer[2] = setInterval(mod_jxmj.ready, 4000, pack);
|
||||
}
|
||||
if (playerRoom.offline_alltimer==-1){
|
||||
var pack = {
|
||||
"app": "youle",
|
||||
"route": 'jinxianmj',
|
||||
"rpc": "sieves",
|
||||
"data": {
|
||||
"agentid": o_room.o_game.o_agent.agentid,
|
||||
"gameid": o_room.o_game.gameid,
|
||||
"roomcode": o_room.roomcode,
|
||||
"seat": 0,
|
||||
}
|
||||
}
|
||||
playerRoom.offline_alltimer=setInterval(mod_jxmj.jxUtil.offline_alltimer,1000,o_room,playerRoom,pack);
|
||||
playerRoom.offlinetime=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
//读取本地存储的游戏数据
|
||||
mod_jxmj.Storage_read = function () {
|
||||
try {
|
||||
mod_jxmj.read_over = mod_jxmj.read_over || 0;
|
||||
if (!mod_jxmj.read_over) {
|
||||
var mj = localStorage.getItem(mod_jxmj.route);
|
||||
if (mj) {
|
||||
mj = JSON.parse(mj);
|
||||
}
|
||||
else {
|
||||
mj = [];
|
||||
}
|
||||
for (var i = 0; i < mj.length; i++) {
|
||||
var roomcode = mj[i];
|
||||
var msg = localStorage.getItem(mod_jxmj.route + roomcode);
|
||||
if (msg) {//var obj=JSON.parse(msg);
|
||||
//playerRoom={};
|
||||
//playerRoom=obj;
|
||||
//localStorage.removeItem(mod_jxmj.route+roomcode);
|
||||
//localStorage.removeItem(mod_jxmj.route);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod_jxmj.read_over = 1;
|
||||
} catch (e) {//console.log(e);
|
||||
}
|
||||
}
|
||||
//本地存储游戏数据
|
||||
mod_jxmj.Storage = function (playerRoom) {
|
||||
var roomcode = playerRoom.roomcode;
|
||||
try {
|
||||
return;
|
||||
var mj = localStorage.getItem(mod_jxmj.route);
|
||||
if (mj) {
|
||||
mj = JSON.parse(mj);
|
||||
var pos = mj.indexOf(playerRoom.roomcode);
|
||||
if (pos == -1) {
|
||||
mj[mj.length] = roomcode;
|
||||
}
|
||||
}
|
||||
else {
|
||||
mj = [];
|
||||
mj[mj.length] = roomcode;
|
||||
}
|
||||
if (playerRoom && playerRoom.poker && playerRoom.poker.length > 0) {
|
||||
localStorage.setItem(mod_jxmj.route, JSON.stringify(mj));
|
||||
localStorage.setItem(mod_jxmj.route + roomcode, JSON.stringify(playerRoom));
|
||||
}
|
||||
} catch (e) {//console.log(e);
|
||||
}
|
||||
}
|
||||
//清空本地存储的游戏数据
|
||||
mod_jxmj.Storage_clear = function (roomcode, o_room) {
|
||||
try {
|
||||
var mj = localStorage.getItem(mod_jxmj.route);
|
||||
if (mj) {
|
||||
mj = JSON.parse(mj);
|
||||
var pos = mj.indexOf(roomcode);
|
||||
if (pos != -1) {
|
||||
mj.splice(pos, 1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
mj = [];
|
||||
}
|
||||
localStorage.setItem(mod_jxmj.route, JSON.stringify(mj));
|
||||
localStorage.removeItem(mod_jxmj.route + roomcode);
|
||||
//localStorage.removeItem(agentid + "_" + gameid + "_" + roomcode);
|
||||
//deletebackup_room(o_room);
|
||||
if (!dbObject) {
|
||||
return;
|
||||
}
|
||||
var agentid = o_room.o_game.o_agent.agentid;
|
||||
var gameid = o_room.o_game.gameid;
|
||||
var roomcode = o_room.roomcode;
|
||||
dbObject.delete(agentid + "_" + gameid + "_" + roomcode);
|
||||
} catch (e) {//console.log(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//备份通用数据
|
||||
//if(playerRoom)
|
||||
//{var o_deskinfo=[];
|
||||
//o_deskinfo["r"+roomcode]=youle_dz["r"+roomcode];
|
||||
//mod_jxmj.app.youle_room.export.backup_room(o_room,o_deskinfo);
|
||||
//}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user