目录结构调整

This commit is contained in:
2026-02-04 23:47:45 +08:00
parent 6938c911c3
commit 6b22238c6e
8780 changed files with 15333 additions and 574 deletions

File diff suppressed because it is too large Load Diff

View 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;
// }

View 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];
}
}
}

View 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;
// }
// }
// }

View File

@@ -0,0 +1,2 @@
///////////牌类/////////////////
var cls_card2_doudizhu=cls_card2.NewClass();

View 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();

View 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();

View 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);
}
}
}

View 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];
}
}

View 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;
}

View 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);
}

View File

@@ -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);
}

View File

@@ -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);
}
}
}

View File

@@ -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();
}

View 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);
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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);
}

View File

@@ -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);
}

View 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));//当前明牌状态
}
}

View 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);
}

View 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);
}
}
}

View 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();

View 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();

View 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;

View 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);
}
}

View 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;
}
};

View 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;
}
}

View 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);
}

View 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);
}
}

View File

@@ -0,0 +1,4 @@
/*
bingo
*/

View File

@@ -0,0 +1,4 @@
/*
bingo
*/

View 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;
}
}

View 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;

View 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);
}

View 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;

View File

@@ -0,0 +1,4 @@
/*
bingo
*/
var bingo_Logic = bingo_Logic || {};

View 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;
}

View 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);
}

View 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(){
//});
//});
//});
//});
//});
//});
});

View 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];
}

File diff suppressed because it is too large Load Diff

View 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(){
});
});
});
});

View 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;
}

View 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;
}
}()
);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,3 @@
algo_hu_base胡的基础算法
algo_classify胡的相关算法-分类
algo_hu_wild_card有百搭牌的胡

View 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();

View 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();

View 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 () {
});

View 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);
//未准备则踢出
}
};

View File

@@ -0,0 +1 @@
config_room·<EFBFBD>¼ה<EFBFBD>ה<EFBFBD><EFBFBD>

View 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);
}
}
}
}

View 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;
}

View 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买马24家买马
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买马24家买马
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;
}

View File

@@ -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) {
}
}
}
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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]];//胡的牌、胡的牌的原来位置
}
}

View 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];
}
}
}

View 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;
}

View 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);
}}

View 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;
}

View 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;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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);
}

View 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;
}

View File

@@ -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);
}
}

View 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下一局准备

File diff suppressed because it is too large Load Diff

View 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]) {
//如果当前的牌是精的话,代号-60LOL
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]) {
//如果当前的牌是精的话,代号-60LOL
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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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(){
});
});
});
});
});
});

View File

@@ -0,0 +1,2 @@
do_point处理分数
imp_flow重连、解散流程

View 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);
}

View 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];
}
}

View 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];//自动胡相关
}

View 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]];//被谁承包了
}

View 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
}

View 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);
}
}
}
}

View 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];//抄庄烂庄计时器
}

View 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 || [];
}

View 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 = [];
}

View 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再次设置各种状态的初始化

View 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