/*****************郑忠水****************/ /** * ———————— *点击事件操作 * ———————— * */ //所有需要点击事件操作都可写在这 d.click = function (spid_up, upx, upy, downx, downy, spid_down) { console.log("clickid=" + spid_up + "," + d.chu_cilck) if (spid_up == 149 || spid_up == 1158) { GameUI.closeRoomInfo(); } else if (spid_up == 284 && Utl.getIsInfinite() == 1) { set_self(110, 7, "系统房"); set_self(512, 37, 0, 0, 0); var h = get_self(109, 21); //set_self(109, 21, h - 20); } else if (spid_up == 1953)//高级选项 { Game_Modify.get_roomtype_ini(); if (get_self(2380, 43, 0, 0) == 1) { Game_Modify.star = 0; } else { Game_Modify.star = 1; } var roomtype = [Game_Modify.Type_1[Game_Modify.CreateRoomData.Type_1].type, Game_Modify.numOfgame,//1局数 Game_Modify.huan_3,//2换三张1换2不换 Game_Modify.top,//3封顶,1:6番封顶 2:不封顶 Game_Modify.deduct_card,//4扣卡方法 -1,//Game_Modify.jiangma,//5红中奖码;0,无奖码;1,159奖码;2,一码全中 Game_Modify.top_limit,//6人数 -1,//Game_Modify.jiang_jima,//7红中奖几码;1,奖2码+4;2,奖4码+8;3,奖6码+12;4,胡几奖几码 -1,//Game_Modify.base_score,//8底分 -1,//Game_Modify.feng,//9带字,1带字,2不带字 -1,//Game_Modify.jia,//10黑摸,1黑摸,2不黑摸 Game_Modify.peng,//Game_Modify.peng,//11一口香,1一口香,2乱碰,3不可碰 [[[[2, 3], [1, 5]], [[3, 4], [3, 4]], [[1, 2], [1, 4]]], [8, 1, 1, 0], 1, 1, [2, 3]],//12摸牌概率配置 Game_Modify.star,//13星星场 1,//14游戏类型 1,//Game_Modify.hu,//15 [0, 0, 0],//16系统房,0初中高级场,1倍数,2限入 [[1600, 800, 4000], [1000, 600]],//17时间配置 Game_Modify.overtime,//18托管 -1,//Game_Modify.Play_card,//19不打牌 sb1.current,//20倍数 sb2.current,//21限制 Game_Modify.tuoguan, //22托管 sb3.current,//23金币房茶水费 Game_Modify.Base,//底分 ];//发送的房间类型数组 Desk.roomtype = [].concat(roomtype); //房间描述 d.a.share(); var _des = Game_Config.Share.gameDescription.split("\n")[0]; if (roomtype[13] == 1) { if (sb1.current == 0) { sb3.setValue(0); sb3.current=0; } Utl.openSnrOption(0, roomtype, _des, sb3.current);//(第一个参数->星星场传0、非星星场传1,第二个参数->roomtype,第三个参数->房间信息描述) } else { roomtype[20] = 0; roomtype[21] = 0; roomtype[23] = 0; SB.currentValue = 0; SB2.currentValue = 0; SB3.currentValue = 0; sb1.current=0; sb2.current=0; sb3.current=0; Utl.openSnrOption(1, roomtype, _des); } Game_Config.Share.description = Game_Config.Share.gameDescription; //Game_Config.Share.appdownload = "https://m.xihasoft.com/act/dongxiang/howto" + "?" + ifast_random(100000); } else if (spid_up == 14)//分享微信朋友圈 { Game_Config.Share.description = "每天可领取免费房卡约麻将"//分享描述 } else if (spid_up == 11 || spid_up == 3019) { if (Utl.getVersionState()) { set_self(d.game2_Number[0], 7, d.gameConfig.asetcount[0] + "局"); set_self(d.game2_Number[1], 7, d.gameConfig.asetcount[1] + "局"); } else if (get_self(2385, 43) == 1) { set_self(d.game2_Number[0], 7, d.gameConfig.asetcount[0] + "局"); set_self(d.game2_Number[1], 7, d.gameConfig.asetcount[1] + "局"); } //显示房卡文字 for (var i = 0; i < d.game1_People.length; i++) { if (get_self(d.game1_People[i], 43) == 1 && get_self(2380, 43) == 1) { set_self(d.game2_Number[0], 7, d.gameConfig.asetcount[0] + "局(" + d.gameConfig.paytype + "x" + d.gameConfig.needroomcard[0][i + 1] + ")"); set_self(d.game2_Number[1], 7, d.gameConfig.asetcount[1] + "局(" + d.gameConfig.paytype + "x" + d.gameConfig.needroomcard[1][i + 1] + ")"); } } if (get_self(2189, 43) == 1 && get_self(2380, 43) == 1) { set_self(d.game2_Number[0], 7, d.gameConfig.asetcount[0] + "局(" + d.gameConfig.paytype + "x" + d.gameConfig.needroomcard[0][0] + ")"); set_self(d.game2_Number[1], 7, d.gameConfig.asetcount[1] + "局(" + d.gameConfig.paytype + "x" + d.gameConfig.needroomcard[1][0] + ")"); } } if (spid_up == 6) { } if (spid_up == 2216) { var send = { "app": "youle", "route": d.route, "rpc": "exit", "data": { "agentid": GameData.AgentId, "gameid": GameData.GameId, "playerid": C_Player.playerid, "roomcode": Desk.roomcode, "seat": C_Player.seat, "exit": d.exit } }; Net.ws_tcp.send(JSON.stringify(send)); d.exit = -1; set_self(2216, 37, 0, 0, 0); } if (spid_up == 2234) {//LOL准备按钮 //Func.createRoom(); var send = { "app": "youle", "route": d.route, "rpc": "war_ready", "data": { "agentid": GameData.AgentId, "gameid": GameData.GameId, "playerid": C_Player.playerid, "roomcode": Desk.roomcode, "seat": C_Player.seat, "ready": 1, } }; Net.ws_tcp.send(JSON.stringify(send)); } // if(spid_up==202 && get_self(149,37,0,0,0)==1) // {d.agree[C_Player.seat]=C_Player.seat; // var send={"app":"youle","route":d.route,"rpc":"agree","data":{"agentid":GameData.AgentId,"gameid":GameData.GameId,"playerid":C_Player.playerid,"roomcode":Desk.roomcode,"seat":C_Player.seat,"agree":0}}; // Net.ws_tcp.send(JSON.stringify(send)); // } if (spid_up == 153) { var sex = Desk.PlayerList[C_Player.seat].sex || 1;//1男2女 if (sex == 1) { Game_Config.Info.TextContentMp3 = ["00031.mp3", "00032.mp3", "00033.mp3", "00034.mp3", "00035.mp3", "00036.mp3", "00037.mp3"]; } else { Game_Config.Info.TextContentMp3 = ["00041.mp3", "00042.mp3", "00043.mp3", "00044.mp3", "00045.mp3", "00046.mp3", "00047.mp3"]; } } //if (spid_up == 153 || spid_up == 698 && get_self(206, 37, 0, 0, 0) == 0 && get_self(698, 35, 0, 0, 0) == 254) { //var sex = C_Player.sex || 1; //GameUI.SelectMsg(); //GameUI.SelectEmotion(); //set_self(698, 43, 2, 0, 0); //for (var spid = 206; spid <= 212; spid++) { //set_self(spid, 37, 1, 0, 0); //} //if (spid_up == 698) { //set_self(698, 43, 2, 0, 0); //set_self(698, 35, 255, 0, 0); //} //} //else if (spid_up == 698 && get_self(698, 35, 0, 0, 0) == 255) { //set_self(698, 43, 1, 0, 0); //set_self(698, 35, 254, 0, 0); //} // if(spid_up==184) // {var text="结算";//房间号+昵称+总分+昵称+每局分数 // Func.gameCopytext(text); // } if (spid_up >= 1770 && spid_up <= 1773) {//显示IP } // else if (spid_up == 13) {//play_wav(".mp3"); // var data = {}; // data.agentid = GameData.AgentId; // data.playerid = C_Player.playerid; // data.gameid = GameData.GameId; // Net.Send_get_player_grade1(data); // } else if (spid_up == 1467 || spid_up == 1466) { set_group(241, 37, 0, 0, 0); set_group(215, 37, 0, 0, 0); Utl.playSound("00" + 170 + ".mp3"); } else if (spid_up >= 1553 && spid_up <= 1562 && get_self(spid_up, 19, 0, 0, 0) > get_self(1665, 19) + parseInt(get_self(1665, 21) / 2) && get_self(spid_up, 19, 0, 0, 0) < get_self(1570, 19, 0, 0, 0) + 36 + 520) { d.h3 = spid_up - 1553; d.a.show_history2(spid_up - 1553, spid_up); Utl.playSound("00" + 170 + ".mp3"); } else if (spid_up == 1573) { set_group(216, 37, 0, 0, 0); set_group(217, 37, 0, 0, 0); set_group(241, 37, 0, 0, 0); set_group(215, 37, 0, 0, 0); Utl.playSound("00" + 170 + ".mp3"); } else if (spid_up == 1341) { set_group(216, 37, 0, 0, 0); set_group(217, 37, 0, 0, 0); set_group(241, 35, 255, 0, 0); set_group(215, 35, 255, 0, 0); d.info2 = 0;//返回第1页 for (var i = 0; i < 4; i++) { set_self(1163 + i, 1, 131, 0, 0); } Utl.playSound("00" + 170 + ".mp3"); } else if (spid_up >= 1653 && spid_up <= 1664 || spid_up >= 2118 && spid_up <= 2123) { if (get_self(spid_up, 19, 0, 0, 0) > get_self(1665, 19, 0, 0, 0) && get_self(spid_up, 19, 0, 0, 0) < get_self(1665, 19, 0, 0, 0) + 36 + 510) { var n = 0; if (spid_up >= 1653 && spid_up <= 1664) { n = spid_up - 1653; } else if (spid_up >= 2118 && spid_up <= 2123) { n = spid_up - 2118 + 12; } d.a.show_history3(n); Utl.playSound("00" + 170 + ".mp3"); } } else if (spid_up >= 1894 && spid_up <= 1905 || spid_up >= 2124 && spid_up <= 2129) { if (get_self(spid_up, 19, 0, 0, 0) > get_self(1665, 19, 0, 0, 0) && get_self(spid_up, 19, 0, 0, 0) < get_self(1665, 19, 0, 0, 0) + 36 + 510 && d.h3 > -1) { var n = 0; if (spid_up >= 1894 && spid_up <= 1905) { n = spid_up - 1894; } else if (spid_up >= 2124 && spid_up <= 2129) { n = spid_up - 2124 + 12; } d.replay_start(d.h3, n); } } else if (spid_up == 1592) { set_group(213, 37, 0, 0, 0); set_group(230, 37, 0, 0, 0); for (var i = 233; i <= 240; i++) { set_group(i, 37, 0, 0, 0); } set_group(216, 37, 0, 0, 0); set_group(217, 37, 0, 0, 0); set_group(241, 37, 0, 0, 0); set_group(215, 37, 0, 0, 0); Utl.playSound("00" + 170 + ".mp3"); if (d.replay == 1) { d.ini_start(); d.replay = 0; Utl.Exit(); } for (var j = 0; j < 4; j++) { Desk.PlayerList[j].avatar = ""; Desk.PlayerList[j].playerid = -1; Desk.PlayerList[j].nickname = ""; Desk.PlayerList[j].sex = 0; } } else if (spid_up == 1598 || spid_up == 1906 || spid_up == 1363) { d.horse_time = 0; d.compare_jing_time3 = 0; set_group(213, 37, 0, 0, 0); set_group(230, 37, 0, 0, 0); for (var i = 233; i <= 240; i++) { set_group(i, 37, 0, 0, 0); } for (var i = 0; i < 4; i++) { set_group(224 + i, 37, 0, 0, 0); } set_group(216, 35, 255, 0, 0); set_group(217, 35, 255, 0, 0); Utl.playSound("00" + 170 + ".mp3"); for (var j = 0; j < 4; j++) { Desk.PlayerList[j].avatar = ""; Desk.PlayerList[j].playerid = -1; Desk.PlayerList[j].nickname = ""; Desk.PlayerList[j].sex = 0; } if (d.replay == 1 || spid_up == 1598) { d.ini_start(); d.replay = 0; Utl.Exit(); if (CombatInfo && CombatInfo.length > 0) { d.a.show_history(CombatInfo); if (d.h3 > -1) { { d.a.show_history2(d.h3, d.h3 + 1553); } } } d.replay_speed(0); } if (spid_up == 1906) { for (var i = 0; i < 4; i++) { set_self(150 + i, 37, 0, 0, 0); } } } else if (spid_up == 1414)//分享 { var head_arr = [];//[1349,1350,1351,1352] for (var i = 0; i < 4; i++) { if (get_self(1349 + i, 37) == 1) { head_arr[head_arr.length] = 1349 + i; } } Func.sharefinend(1, 2, Game_Config.Share.appdownload, '[绍兴麻将]房号' + d.roomcode + '(' + d.turn[2] + '局)', Game_Config.Share.description, head_arr); Utl.playSound("00" + 170 + ".mp3"); } else if (spid_up == 1288)//调速 { set_self(1288, 43, 1, 1, 0); if (get_self(1288, 43, 0, 0, 0) > 3) { set_self(1288, 43, 1, 0, 0); } d.replay_speed(get_self(1288, 43, 0, 0, 0)); } else if (spid_up === 2055) { set_group(244, 37, 0, 0, 0); } else if (spid_up == 1435) { d.ini_start(1); Utl.Exit(); Utl.playSound("00" + 170 + ".mp3"); } RoomFunc.c_click(spid_up, upx, upy, downx, downy, spid_down) if (d.replay) { return; } if (spid_up == 2673)//等一等 { return; d.user_ctrl0 = new Date().getTime(); if (get_self(1289, 37) == 0) { set_self(1289, 7, 10); set_self(1289, 37, 1); } //set_self(2673,37,0); var data = {}; data.agentid = GameData.AgentId; data.gameid = GameData.GameId; data.playerid = C_Player.playerid; data.roomcode = Desk.roomcode; data.text = "等一等"; Net.Send_send_text(data); var send = { "app": "youle", "route": d.route, "rpc": "wait_me", "data": { "agentid": GameData.AgentId, "gameid": GameData.GameId, "playerid": C_Player.playerid, "roomcode": Desk.roomcode, "seat": C_Player.seat, } }; Net.ws_tcp.send(JSON.stringify(send)); } if (spid_up >= 376 && spid_up <= 379) { //d.show_distance_1(spid_up); } if (spid_up == 515) { //Func.createRoom(); var persons = [4, 4, 3, 2]; var person = persons[Desk.roomtype[6]] || 4; if (d.isEnd() && person == 2 && C_Player.seat == 0) { set_self(437, 37, 1, 0, 0); set_self(1222, 37, 1, 0, 0); } if (d.isEnd() && person == 2 && C_Player.seat == 1) { set_self(439, 37, 1, 0, 0); set_self(1224, 37, 1, 0, 0); } if (d.isEnd() && person > 2) { for (var i = 0; i < person; i++) { set_self(436 + d.pos[i], 37, 1, 0, 0); set_self(1221 + d.pos[i], 37, 1, 0, 0); } } set_group(219, 37, 0, 0, 0); set_self(2998, 37, 0, 0, 0); set_group(260, 37, 0, 0, 0); d.show_timeready(1); set_self(2997, 18, 614, 0, 0); set_self(2997, 19, 287, 0, 0); d.click_ready(1403); } if (spid_up == 1159) { //Func.createRoom(); set_group(244, 37, 0, 0, 0); set_group(213, 37, 0, 0, 0); set_group(230, 37, 0, 0, 0); set_self(1408, 43, 1, 0, 0); set_self(2998, 37, 1, 0, 0); set_self(515,19,346,0,0); for (var i = 233; i <= 240; i++) { set_group(i, 37, 0, 0, 0); } if (Utl.getIsInfinite() != 1) { if(d.user_ctrl[C_Player.seat]==1&&(Desk.roomtype[14]==3||Desk.roomtype[14]==4)||(Desk.roomtype[14]!=3&&Desk.roomtype[14]!=4)) {set_self(1408, 37, 1, 0, 0);} } if (d.turn[1] < d.turn[2]) { set_self(291, 7, "房号:" + Desk.roomcode + "\n(" + String(d.turn[1] + 1) + "/" + Desk.count + "局)"); } if (d.turn[1] + 1 >= d.turn[2]) { set_self(1408, 43, 2, 0, 0); //d.hide_timeready(); } for (var i = 0; i < 4; i++) { if (i > 1 && d.turn[1]+1 != d.turn[2]) { set_self(150 + i, 37, 1, 0, 0); } } Utl.playSound("00" + 170 + ".mp3"); d.show_timeready(1); } if (Desk.stage == 0) { return; } RoomFunc.g_click(spid_up, upx, upy, downx, downy, spid_down) var re_ban = 0; if (spid_up == 1403 || spid_up == 1408) { if (spid_up == 1403 && get_self(1403, 43) == 2 || spid_up == 1408 && get_self(1408, 43) == 2) { //Func.exitRoom(); } else { //Func.createRoom(); d.send_ip(); d.send_distance(); } set_self(2998, 37, 0, 0, 0); d.click_ready(spid_up); } else { re_ban = 1; } if (re_ban == 0 && spid_up > 0 && get_self(1158, 37, 0, 0, 0) == 0 && get_self(1413, 37, 0, 0, 0) == 0) { var nowtime = new Date().getTime(); d.replay_record(1, nowtime, spid_up); } } d.chi_ani = function () { d.N = d.ob.oB(Math.round(2879.5)); d.M = d.ob.oB(Math.round(2887.5)); d.quan = d.get_free_o(d.N); d.waiq = d.get_free_o(d.M); AM.remove(d.quan); AM.add(d.quan).bfunc(function () { set_self(d.quan, 34, 0, 0, 0); set_self(d.quan, 37, 1, 0, 0); set_self(d.quan, 41, 0, 0, 0); }).rotate(360, 35).rotate(0, 35).repeat().start(); AM.remove(d.waiq); AM.add(d.waiq).bfunc(function () { set_self(d.waiq, 35, 200, 0, 0); set_self(d.waiq, 37, 1, 0, 0); set_self(d.waiq, 33, 100, 0, 0); }).zoom(130, 35).zoom(100, 35).repeat().start(); } d.straight = function (num) { AM.remove(num); AM.add(num).bfunc(function () { set_self(num, 37, 1, 0, 0); //set_self(num,18,get_self(881,18)); set_self(num, 43, 1, 0, 0); }).wait(1, function () { set_self(num, 43, 2, 0, 0); }).wait(1, function () { set_self(num, 43, 3, 0, 0); }).wait(1, function () { set_self(num, 43, 4, 0, 0); }).wait(1, function () { set_self(num, 43, 5, 0, 0); }).wait(1, function () { set_self(num, 43, 6, 0, 0); }).wait(1, function () { set_self(num, 43, 7, 0, 0); }).wait(1, function () { set_self(num, 43, 8, 0, 0); }).wait(1, function () { set_self(num, 43, 9, 0, 0); }).wait(1, function () { set_self(num, 43, 10, 0, 0); }).wait(1, function () { set_self(num, 37, 0, 0, 0); set_self(num + 19, 37, 0, 0, 0); }).start(); } d.fina_Hu = function () { if (d.isEnd()) { d.show_you13card(); d.show_shang13card(); d.show_zuo13card(); set_self(2903, 37, 1, 0, 0); set_group(201, 37, 0, 0, 0); set_group(207, 37, 0, 0, 0); set_self(2898, 37, 0, 0, 0); set_self(1289, 37, 0, 0, 0); if (Utl.getIsInfinite() == 1) { set_self(1403, 37, 0, 0, 0); set_self(515, 37, 1, 0, 0); set_self(515, 19, 610, 0, 0); } else { set_self(1403, 37, 1, 0, 0); set_self(515, 37, 0, 0, 0); } if (d.replay == 1) { set_self(1598, 37, 1, 0, 0); set_self(1403, 37, 0, 0, 0); } for (var j = 0; j < 3; j++) { set_self(2892 + j, 37, 0, 0, 0); } set_self(2902, 37, 0, 0, 0); return; //set_group(208,37,1,0,0); var point = [2870, 2872, 2874, 2876]; var scro = [2871, 2873, 2875, 2877]; //var z_P = [2904,2909,2914,2394]; var persons = [4, 4, 3, 2]; var person = persons[Desk.roomtype[6]] || 4; if (person == 2) { point = [2870, 2874, 2874, 2874]; scro = [2871, 2875, 2875, 2875]; //z_P = [2904,2914,2914,2914]; } for (var i = 0; i < person; i++) { if (d.hand[i][0].length == 5) { AM.remove(2925); AM.add(2925).bfunc(function () { set_self(2925, 37, 1, 0, 0); set_self(2925, 33, 50, 0, 0); }).zoom(150, 15).zoom(100, 15).wait(3, function () { set_self(2925, 37, 0, 0, 0); set_self(2925, 33, 50, 0, 0); }).start(); } var l = String(d.turn_point[d.turn[1]][i]).length; if (d.turn_point[d.turn[1]][i] < 0) { var str = String(d.turn_point[d.turn[1]][i]); var str2 = str.split("-").join(""); set_self(point[d.pos[i]], 37, 1, 0, 0); set_self(point[d.pos[i]], 43, 12, 0, 0); set_self(scro[d.pos[i]], 37, 1, 0, 0); set_self(scro[d.pos[i]], 7, str2, 0, 0); var str_l = String(str2).length; set_self(scro[d.pos[i]], 20, str_l * 30, 0, 0); } else { set_self(point[d.pos[i]], 37, 1, 0, 0); set_self(point[d.pos[i]], 43, 11, 0, 0); set_self(scro[d.pos[i]], 37, 1, 0, 0); set_self(scro[d.pos[i]], 7, d.turn_point[d.turn[1]][i], 0, 0); set_self(scro[d.pos[i]], 20, 30 * l, 0, 0); } for (var j = 0; j < d.hand[i][0].length; j++) { //set_self(z_P[d.pos[i]]+j,37,1,0,0); //set_self(z_P[d.pos[i]]+j,43,d.hand[i][0][j],0,0); } if (d.sea[i] && d.hand[i][0].length == 0) { for (var j = 0; j < d.sea[i].length; j++) { //set_self(z_P[d.pos[i]]+j,37,1,0,0); //set_self(z_P[d.pos[i]]+j,43,d.sea[i][j],0,0); } } } } } var PDKConfig={ danshunNum:5, duishunNum:2, sandaiOrNot:1, last4:0 }; var Tool = { clearClone: function (object) { if (!object) { return; } return JSON.parse(JSON.stringify(object)); }, deviceTool: function (type, array) { var painum = []; var innerType = 0; switch (type) { case 'magic': innerType = 1; break; case 'id': innerType = 2; break; case 'origin': innerType = 3; break; case 'number': innerType = 4; break; case 'weight': innerType = 5; break; case 'color': innerType = 6; break; } for (var i = 0; i < array.length; i++) { if (innerType == 1 && array[i].magic) { painum[painum.length] = this.clearClone(array[i]); } else if (innerType == 2) { painum[i] = array[i].id; } else if (innerType == 3) { painum[i] = array[i].origin; } else if (innerType == 4) { painum[i] = array[i].num; } else if (innerType == 5) { painum[i] = array[i].weight; } else if (innerType == 6) { painum[i] = array[i].color; } } return painum; }, weightSort: function (array) { array.sort(function (a, b) { return a.weight - b.weight; }); }, allNumber: function (array) { var card = []; var number = [] var num = {}; var result = []; //字典存储 array.forEach((v, i, s) => { if (num[v]) { num[v]++; } else { num[v] = 1; } }); card = array.filter((v, i, s) => { return array.indexOf(v) == i; }); card.forEach((v, i) => { number[i] = num[v]; }) var len = card.length; for (var i = 0; i < len; i++) { var obj = { val: card[i], num: number[i] } result[i] = obj; } result.sort(function (a, b) { return b.num - a.num; }); return result; }, maxNumber: function (array) { var result = []; result = array.filter((v, i, s) => { return array[0].num == v.num; }); return result; }, suitNumber: function (array, number, biggerOrNot) { biggerOrNot = biggerOrNot == undefined ? false : true; var result_go = []; var result_stand = []; result_go = array.filter((v, i, s) => { if (biggerOrNot) { var test = number <= v.num; if (!test) { result_stand.push(v); } return number <= v.num; } var test = number == v.num; if (!test) { result_stand.push(v); } return number == v.num; }); return { suit: result_go, notsuit: result_stand }; }, rangeDevice: function (suit, width) { var innerSuit = [].concat(suit); var rrr = []; for (var i = 0; i < innerSuit.length;) { var array = innerSuit.slice(i, i + width); var go = 1; for (var j = 0; j < array.length - 1; j++) { if (array[j + 1].val - array[j].val != 1) { go = 0; break; } } if (go && array.length == width) { rrr[rrr.length] = array; i = i + 1; } else { i++; } } return rrr; }, checkSHUN: function (array) { var result = 1; for (var i = 1; i < array.length; i++) { if (array[i] != array[i - 1] + 1) { result = 0; break; } } return result; } }; CardInfo.prototype.Config = { weight: 1, //牌的权重定义 cardWeight: [12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], //A,2,3,4,5,6,7,8,9,10,J,Q,K convert: 1, //牌的转换, //当算法卡组与实际卡组不同时使用 convertHand: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 101, 102, ], magic: function (card) { return false; }, }; function CardInfo(card, convert) { this.id = -1; //物理纸牌 this.num = -1 // 物理大小 this.color = -1; //物理花色 this.weight = -1; //算法权重 card = convert ? this.convertIn(card) : card; this.id = card; this.origin = convert ? this.convertOut(card) : card; this.color = parseInt(String(this.id)[0]); //物理大小 this.num = parseInt(String(this.id).slice(1)); //物理花色 var weight = this.Config.weight == 1 ? this.Config.cardWeight : [12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; this.weight = weight[this.num - 1]; this.img = ["?梅花", "?方片", "?红桃", "?黑桃", "鬼"][this.color - 1] + this.num; this.magic = false; //花色>4为癞子 if (this.Config.magic(this)) { this.magic = true; } } CardInfo.prototype.convertOut = function (one) { if (!this.Config.convert) return one; var result; var _from = this.Config.convertHand; var _to = [ 11, 12, 13, 14, 15, 16, 17, 18, 19, 110, 111, 112, 113, 21, 22, 23, 24, 25, 26, 27, 28, 29, 210, 211, 212, 213, 31, 32, 33, 34, 35, 36, 37, 38, 39, 310, 311, 312, 313, 41, 42, 43, 44, 45, 46, 47, 48, 49, 410, 411, 412, 413, 51, 52, ]; var index = _to.indexOf(one); if (index == -1) { throw "牌型错误" } result = _from[index]; return result; }; CardInfo.prototype.convertIn = function (one) { if (!this.Config.convert) return one; var result; var _from = this.Config.convertHand; var _to = [ 11, 12, 13, 14, 15, 16, 17, 18, 19, 110, 111, 112, 113, 21, 22, 23, 24, 25, 26, 27, 28, 29, 210, 211, 212, 213, 31, 32, 33, 34, 35, 36, 37, 38, 39, 310, 311, 312, 313, 41, 42, 43, 44, 45, 46, 47, 48, 49, 410, 411, 412, 413, 51, 52, ]; var index = _from.indexOf(one); if (index == -1) { throw "牌型错误" } result = _to[index]; return result; }; //牌型构造 function CardType(hand) { this.build(Tool); var cards = []; for (var i = 0; i < hand.length; i++) { var element = hand[i]; cards[i] = new CardInfo(element, true); } this.cards = [].concat(cards); this.weightSort(this.cards); //权重排序 //拆分各种数据 this.device = { weight: this.deviceTool('weight', this.cards), color: this.deviceTool('color', this.cards), number: this.deviceTool('number', this.cards), id: this.deviceTool('id', this.cards), origin: this.deviceTool('origin', this.cards), } //统计 this.count = {}; this.count.allNum = this.allNumber(this.device.weight) //牌数 this.count.maxNum = this.maxNumber(this.count.allNum) //牌数 this.check(); } CardType.prototype.check = function () { this.weightSort(this.cards); var type = this.checkTong(this.cards); (!type) && (type = this.checkDai(this.cards)); (!type) && (type = this.checkGod(this.cards)); type = type || 'error'; this.type = type || 'error'; } CardType.prototype.checkTong = function () { if (this.cards.length === 0) { return; } //分离出来的权重 var cardsWE = this.device.weight; var allNum = this.count.allNum; //牌数 var maxNum = this.count.maxNum; //多数; var result; //牌数最多的人 var number = allNum[0].num; switch (number) { case 1: if (allNum.length >= PDKConfig.danshunNum && allNum.length == maxNum.length && this.checkSHUN(cardsWE) && allNum[allNum.length - 1].val < 13) { result = this.createType( "shun", allNum.length, 1, cardsWE[0], "顺子" ); } else if (allNum.length == 1 && allNum.length == maxNum.length) { result = this.createType("dan", 1, 1, cardsWE[0], "单牌"); } break; case 2: if (allNum.length == 1 && maxNum.length == 1) { if (maxNum[0].num == 2) { result = this.createType("dui", 1, 1, cardsWE[0], "对子"); } } if (allNum.length >= PDKConfig.duishunNum && allNum[allNum.length - 1].num == 2 && allNum.length == maxNum.length) { var card = cardsWE.filter((v, i, s) => { return cardsWE.indexOf(v) == i; }); if (this.checkSHUN(card) && card[card.length - 1] < 13) { result = this.createType("duishun", card.length, 1, cardsWE[0], "对顺子"); } } break; case 3: if (allNum.length > 1 && allNum[allNum.length - 1].num == 3 && (PDKConfig.sandaiOrNot == 0||(PDKConfig.sandaiOrNot == 1&&PDKConfig.last4 == cardsWE.length))) { //去重 var card = cardsWE.filter((v, i, s) => { return cardsWE.indexOf(v) == i; }); if (this.checkSHUN(card) && card[card.length - 1] < 13) { // console.log("三顺",cardsWE); result = this.createType("feiji", card.length, 1, cardsWE[0], "三顺子"); } } else if (allNum.length == 1 && maxNum.length == 1) { if (maxNum[0].num == 3 && (PDKConfig.sandaiOrNot == 0||(PDKConfig.sandaiOrNot == 1&&PDKConfig.last4 == 3))) { //10张或者剩最后4张 // console.log("三张", cardsWE); if (PDKConfig.sandaiOrNot == 1&&PDKConfig.last4 == 3){ result = this.createType("sandai2", 1, 1, cardsWE[0], "三张"); } else { result = this.createType("san", 1, 1, cardsWE[0], "三张"); } } } break; case 4: if (allNum.length == 1 && maxNum.length == 1) { if (maxNum[0].num == 4) { result = this.createType("zha", 1, 2, cardsWE[0], "炸弹"); } } break; } if (result) { return result; } }; CardType.prototype.checkDai = function () { //判断3+1,3+(2),3+3+(1+1),3+3+(4),3+3+3+(6) //判断4+1,4+(2) var cardsWE = this.device.weight; var allNum = this.allNumber(cardsWE); //牌数 var maxNum = this.maxNumber(allNum); //最多数的牌; var result; if (this.cards.length === 0) { return; } if (allNum.length == 2 && maxNum.length == 1 && maxNum[0].num == 3 && allNum[1].num == 1 && PDKConfig.last4 == 4&& PDKConfig.sandaiOrNot == 1) { //有两种牌+最多的一种牌有三张+最多的牌的数量是3张=三带一 result = this.createType("sandai2", 1, 1, maxNum[0].val, "三带一"); } else if (allNum.length == 2 && maxNum.length == 1 && maxNum[0].num == 3 && allNum[1].num == 2 && PDKConfig.sandaiOrNot==1) { //有两种牌+最多的一种牌有三张+最多的牌的数量是3张=三带一对 result = this.createType("sandai2", 1, 1, maxNum[0].val, "三带二"); } else if (allNum.length == 3 && maxNum.length == 1 && maxNum[0].num == 3 && allNum[1].num == 1 && allNum[2].num == 1 && PDKConfig.sandaiOrNot==1) { //三带两张 result = this.createType("sandai2", 1, 1, maxNum[0].val, "三带二单"); } else { var sortByWE = [].concat(allNum).sort(function (a, b) { return a.val - b.val; }); //3个跟不是3个的 var suitNum = this.suitNumber(sortByWE, 3, true); var suit = suitNum.suit; var notsuit = suitNum.notsuit; var plane_number = [10,15]; var plane_fly = [2, 3]; var aaa = plane_number.indexOf(cardsWE.length); var number = 0; if (aaa != -1) { number = plane_fly[plane_number.indexOf(cardsWE.length)]; }else if (PDKConfig.sandaiOrNot == 1){ var plane_numb___er = [7,8,9,10,11,12,13,14,15,16]; var plane_____fly = [2,2,2,2,3,3,3,3,3,4]; aaa=plane_numb___er.indexOf(cardsWE.length); //一把能出掉所有飞机 if (aaa!=-1&&PDKConfig.last4 ==cardsWE.length) { number=plane_____fly[plane_numb___er.indexOf(cardsWE.length)]; } } var nums = []; if (number > 0) { nums = this.rangeDevice(suit, number); } if (nums.length > 0&& PDKConfig.sandaiOrNot == 1) { //3+3+(4)随意带牌 result = this.createType("feiji", nums[0].length, 1, nums[nums.length - 1][0].val, "飞机"); } } if (result) { return result; } }; CardType.prototype.checkGod = function () { var cardsWE = this.device.weight; var cardsCO = this.device.color; var result; if (cardsCO.length == 2 && cardsCO[0] > 4 && cardsCO[1] > 4) { result = this.createType("god", 100, cardsWE[0], cardsWE, "天王炸"); } if (result) { return result; } } CardType.prototype.createType = function (type, typetimes, cardWeight, weight, desc) { var that = this; desc = desc || ''; return { desc: desc, type: type, typetimes: typetimes, cardWeight: cardWeight, weight: weight, cardNum: that.device.number, cardColor: that.device.color, cardId: that.device.id, cardWe: that.device.weight, } } CardType.prototype.use = function (name, object) { CardType.prototype['$' + name] = object; } CardType.prototype.build = function (object) { for (var key in object) { if (object.hasOwnProperty(key)) { var element = object[key]; CardType.prototype[key] = element; } } } function Battle() { } Battle.prototype.output = function (Arr) { Arr = new CardType(Arr); var arrType = Arr.type; if (arrType !== 'error') { return arrType.desc; } return false; }; Battle.prototype.check = function (Arr) { var roomtype; if (Desk.roomtype&&Desk.roomtype.length>0){ roomtype=Desk.roomtype; } if (d.roomtype&&d.roomtype.length>0){ roomtype=d.roomtype; } if (roomtype&&roomtype[11]==2){ PDKConfig={ danshunNum:5, duishunNum:2, sandaiOrNot:1, last4:0 }; }else if (roomtype&&roomtype[11]==1){ PDKConfig={ danshunNum:5, duishunNum:2, sandaiOrNot:1, last4:0 }; }else if (roomtype&&roomtype[11]==0){ PDKConfig={ danshunNum:3, duishunNum:2, sandaiOrNot:0, last4:0 }; } if(C_Player.seat!=undefined&&C_Player.seat>-1){ PDKConfig.last4=d.hand[C_Player.seat][0].length; if (PDKConfig.last4==0){ PDKConfig.last4=Arr.length; } } Arr = new CardType(Arr); var arrType = Arr.type; if (arrType !== 'error') { return arrType.type; } return false; }; Battle.prototype.beat = function (prevArr1, nextArr2, change) { var roomtype; if (Desk.roomtype&&Desk.roomtype.length>0){ roomtype=Desk.roomtype; } if (d.roomtype&&d.roomtype.length>0){ roomtype=d.roomtype; } if (roomtype&&roomtype[11]==2){ PDKConfig={ danshunNum:5, duishunNum:2, sandaiOrNot:1, last4:0 }; }else if (roomtype&&roomtype[11]==1){ PDKConfig={ danshunNum:5, duishunNum:2, sandaiOrNot:1, last4:0 }; }else if (roomtype&&roomtype[11]==0){ PDKConfig={ danshunNum:3, duishunNum:2, sandaiOrNot:0, last4:0 }; } if(C_Player.seat!=undefined&&C_Player.seat>-1){ PDKConfig.last4=d.hand[C_Player.seat][0].length; } if (change) { //右边大于左边,左边确定 nextArr = new CardType(prevArr1); var nextType = nextArr.type; if (nextType.type !== 'error') { prevArr = new CardType(nextArr2, nextType.weight + 1, nextType.type); var prevType = prevArr.type; } } else { //左边大于右边,左边确定 prevArr = new CardType(prevArr1); var prevType = prevArr.type; if (prevType.type !== 'error') { nextArr = new CardType(nextArr2, prevType.weight - 1, prevType.type); var nextType = nextArr.type; } } if (prevType && nextType && prevType !== 'error' && nextType !== 'error') { if (prevType.cardWeight == nextType.cardWeight) { if (prevType.type == nextType.type) { if ((prevType.cardNum.length == nextType.cardNum.length)||(PDKConfig.last4>0&&['sandai2','feiji'].indexOf(prevType.type)!=-1)) { if (prevType.weight > nextType.weight) { return true; } } } } else if (prevType.cardWeight > nextType.cardWeight) { return true; } } return false; }; Battle=new Battle();