目录结构调整
This commit is contained in:
@@ -0,0 +1,497 @@
|
||||
/*****************黄欢****************/
|
||||
/**
|
||||
* ————————
|
||||
*游戏自定义接口
|
||||
* ————————
|
||||
* */
|
||||
|
||||
var RoomConfig = {
|
||||
roomcode: 100000,
|
||||
roomtype: [],
|
||||
room_name_type: {},
|
||||
turns: 0,
|
||||
people: 2,
|
||||
}
|
||||
|
||||
/*房间号,局数,游戏玩法,人数*/
|
||||
function RoomInit(roomtype) {
|
||||
RoomConfig.roomcode = Desk.roomcode || 100000;
|
||||
if (Desk.roomtype && Desk.roomtype.length > 0) {
|
||||
RoomConfig.roomtype = Desk.roomtype;
|
||||
} else if (roomtype && roomtype.length > 0) {
|
||||
RoomConfig.roomtype = roomtype;
|
||||
} else {
|
||||
RoomConfig.roomtype = [];
|
||||
}
|
||||
(function (roomtype) {
|
||||
RoomConfig.turns = roomtype[1] * 8 || 0;
|
||||
var peoples = [4, 4, 3, 2]
|
||||
RoomConfig.people = (peoples[roomtype[6]]) || 4;
|
||||
RoomConfig.room_name_type.jushu = roomtype[1];//局数
|
||||
RoomConfig.room_name_type.buy_horse = roomtype[2];//买马
|
||||
RoomConfig.room_name_type.limit = roomtype[3];//精分
|
||||
RoomConfig.room_name_type.horse = roomtype[5];//几匹马
|
||||
RoomConfig.room_name_type.top_limit = roomtype[6];//封顶 人数
|
||||
RoomConfig.room_name_type.host2 = roomtype[7];//庄家翻倍
|
||||
RoomConfig.room_name_type.base_score = roomtype[8];//底分
|
||||
RoomConfig.room_name_type.piao = roomtype[9];//底分
|
||||
RoomConfig.room_name_type.jia = roomtype[10];//底分
|
||||
RoomConfig.room_name_type.start_hu = roomtype[11];//底分
|
||||
RoomConfig.room_name_type.start_hu_arr = roomtype[12];//底分
|
||||
RoomConfig.room_name_type.star = roomtype[13];//底分
|
||||
RoomConfig.room_name_type.qiangganghu = roomtype[15];//底分
|
||||
})(RoomConfig.roomtype);
|
||||
}
|
||||
|
||||
//房间接口
|
||||
var RoomFunc = {};
|
||||
//房间变量池
|
||||
var RoomPool = {};
|
||||
|
||||
//可能会执行很多次
|
||||
//点击,永远可用
|
||||
RoomFunc.c_click = function (spid_up, upx, upy, downx, downy, spid_down) {
|
||||
if (spid_up == 1403) {
|
||||
d.click_ready(1403);
|
||||
set_group(208,37,0,0,0);
|
||||
set_group(300,37,0,0,0);
|
||||
}
|
||||
if (spid_up == 2998) {
|
||||
d.show_xiao_settle(1);
|
||||
d.show_timeready(1);
|
||||
}
|
||||
if (spid_up != 2999 && get_self(1247, 37)) {//听牌显示
|
||||
set_group(237, 37, 0, 0, 0);
|
||||
}
|
||||
if (spid_up == 2233) {//托管
|
||||
RoomFunc.tuoguan();
|
||||
}
|
||||
if (spid_up == 2996 && d.huanpai2.length == 3) {//换三张
|
||||
d.huanpai3(1);
|
||||
}
|
||||
if (spid_up == 2994) {//取消换三张
|
||||
d.huanpai3(2);
|
||||
}
|
||||
if (d.replay == 0 && (spid_up == 2231 || spid_up == 2232)) {//取消托管
|
||||
d.OverTime = 0;
|
||||
d.jishi_chu = 0;
|
||||
set_group(221, 37, 0, 0, 0);
|
||||
set_self(2233, 43, 1, 0, 0);
|
||||
if(d.user_ctrl[2] == C_Player.seat && d.replay==0) {
|
||||
set_self (2895,37,1,0,0);
|
||||
set_self (2896,37,1,0,0);
|
||||
set_self (2897,37,1,0,0);
|
||||
}
|
||||
d.show_my13card();
|
||||
d.show_14card();
|
||||
}
|
||||
if (spid_up == 2509) {//小局2
|
||||
d.horse_time = 0;
|
||||
d.compare_jing_time3 = 0;
|
||||
if (get_self(1598, 37) == 1) {
|
||||
d.a.show_history3_1();
|
||||
} else {
|
||||
d.show_xiao1_settle(1);
|
||||
}
|
||||
}
|
||||
if (spid_up == 2510) {//小局2
|
||||
set_group(260, 37, 0, 0, 0);
|
||||
}
|
||||
if (spid_up == 2656) {//精牌详情
|
||||
d.horse_time = 0;
|
||||
d.compare_jing_time3 = 0;
|
||||
set_self(2656, 37, 0);
|
||||
d.show_xiao2_settle(1);
|
||||
set_group(214, 41, 0, 0, 0);
|
||||
set_self(2657, 41, 1);
|
||||
set_self(2787, 41, 1);
|
||||
//if (get_self(1598,37) == 1) {
|
||||
//d.a.show_history3_2();
|
||||
//}else {
|
||||
//d.show_xiao2_settle(1);
|
||||
//}
|
||||
}
|
||||
if (spid_up == 2787 || spid_up == 2657) {//关闭精牌详情
|
||||
set_self(2656, 37, 1);
|
||||
set_group(214, 37, 0, 0, 0);
|
||||
}
|
||||
if (spid_up == 233) {//结算
|
||||
d.compare_jing_time3 = 0;
|
||||
}
|
||||
if (spid_up == 700) {//关闭胡杠详情
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[Desk.roomtype[6]] || 4;
|
||||
for (var i = 0; i < person; i++) {
|
||||
set_self(717 + i, 37, 1);
|
||||
}
|
||||
set_group(214, 37, 0, 0, 0);
|
||||
}
|
||||
if (spid_up == 2895 && d.replay==0) {
|
||||
d.click_btn(0);
|
||||
}
|
||||
if (spid_up == 2896 && d.replay==0) {
|
||||
// d.click_btn(1);
|
||||
RoomFunc.click_tip();
|
||||
}
|
||||
if (spid_up == 2897 && d.replay==0) {
|
||||
d.click_btn(2);
|
||||
}
|
||||
//console.log("roomfunc 点击,永远可用");
|
||||
}
|
||||
|
||||
RoomFunc.click_tip = function(){
|
||||
if(d.getEnumCard.flag){
|
||||
// var tip = d.getEnumCard.value[d.getEnumCard.getIndex()];
|
||||
var tip = d.getTip();
|
||||
if (tip.length>0) {
|
||||
for (var i = 0; i < 60; i++) {
|
||||
if (get_self(817 + i, 19, 0, 0, 0) < 500) {
|
||||
set_self(817 + i, 19, 500, 0, 0);
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < tip.length; i++) {
|
||||
var index = d.hand[C_Player.seat][0].indexOf(tip[i]);
|
||||
set_self(817 + index, 19, 480, 0, 0);
|
||||
}
|
||||
d.pai = d.c(tip);
|
||||
d.show_btn();
|
||||
}else{
|
||||
d.click_btn(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//点击,游戏开始之后可用
|
||||
RoomFunc.g_click = function (spid_up, upx, upy, downx, downy, spid_down) {
|
||||
//console.log("roomfunc 点击,游戏开始之后可用");
|
||||
}
|
||||
|
||||
//开战,是否发牌
|
||||
RoomFunc.make_war = function (_msg) {
|
||||
console.log("roomfunc RoomConfig一进去就开战");
|
||||
return true;
|
||||
}
|
||||
|
||||
//重连重绘之前,游戏开始后收到包就执行
|
||||
RoomFunc.running_before = function (_msg) {
|
||||
console.log("roomfunc RoomConfig重连重绘之前,游戏开始后收到包就执行");
|
||||
}
|
||||
|
||||
//重连重绘
|
||||
RoomFunc.re_connect = function () {
|
||||
console.log("roomfunc RoomConfig重连重绘")
|
||||
}
|
||||
|
||||
//重连重绘之后,游戏开始后收到包就执行
|
||||
RoomFunc.running_after = function (_msg) {
|
||||
console.log("roomfunc RoomConfig重连重绘之后,游戏开始后收到包就执行")
|
||||
}
|
||||
|
||||
//点击牌的判断
|
||||
RoomFunc.clickpai_before = function (spid, a) {
|
||||
if (d.replay != 0) {
|
||||
return false;
|
||||
}
|
||||
if (d.isEnd()) {
|
||||
return false;
|
||||
}
|
||||
if (get_self(spid, 21) < 120) {
|
||||
return false;
|
||||
}
|
||||
//if (d.ting_record[C_Player.seat] == 0) {
|
||||
//return true;
|
||||
//} else if (d.ting_record[C_Player.seat] == 1) {
|
||||
//var pos = d.Ting_Tip.indexOf(get_self(spid, 43));
|
||||
//if (pos != -1) {
|
||||
//return true;
|
||||
//}
|
||||
//} else if (d.ting_record[C_Player.seat] == 3) {
|
||||
//if (d.user_ctrl[3] == get_self(spid, 43) && spid >= 817 + d.hand[C_Player.seat][0].length) {
|
||||
//return true;
|
||||
//}
|
||||
//}
|
||||
return false;
|
||||
}
|
||||
|
||||
//点击操作按钮,显示出操作图案之后
|
||||
RoomFunc.operate_before = function (spid, num) {//num=7是自摸,8是放炮 ,9?10?
|
||||
if (num == 8) {
|
||||
//return;
|
||||
}
|
||||
if (num == 20) {
|
||||
num = 12;
|
||||
}
|
||||
if (!AM.is_play(spid)) {
|
||||
AM.remove(spid, false)
|
||||
var dh_bz = [0, 0, 634, 633, 630, 633, 633, 631, 631, 631, 632, 9, 632];//1吃,3杠,5胡,7碰,9听,
|
||||
//var a=1;
|
||||
AM.add(spid).bfunc(function () {
|
||||
set_self(spid, 1, dh_bz[num], 0, 0);
|
||||
set_self(spid, 37, 1, 0, 0);
|
||||
set_self(spid, 33, 200, 0, 0);
|
||||
set_self(spid, 43, 1, 0, 0);
|
||||
}).zoom(300, 8).zoom(150, 3).wait(5, function () {
|
||||
//set_self(spid,37,0,0,0);
|
||||
//AM.cls_id(spid);
|
||||
}).start();
|
||||
}
|
||||
var dh_bz2 = [0, 0, 634, 633, 630, 633, 633, 631, 631, 631, 632, 9, 632];//1吃,3杠,5胡,7碰,9听,
|
||||
if (!AM.is_play(spid + 61)) {
|
||||
AM.add(spid + 61).wait(3, function () {
|
||||
set_self(spid + 61, 1, dh_bz2[num], 0, 0);
|
||||
set_self(spid + 61, 18, get_self(spid, 18) - 90, 0, 0);
|
||||
set_self(spid + 61, 19, get_self(spid, 19) - 90, 0, 0);
|
||||
set_self(spid + 61, 37, 1, 0, 0);
|
||||
set_self(spid + 61, 43, 2, 0, 0);
|
||||
set_self(spid + 61, 35, 255, 0, 0);
|
||||
set_self(spid + 61, 33, 0, 0, 0);
|
||||
}).alpha(200, 8).zoom(200, 8).wait(10, function () {
|
||||
//set_self(spid+61,43,4,0,0);
|
||||
set_self(spid + 61, 37, 0, 0, 0);
|
||||
set_self(spid, 37, 0, 0, 0);
|
||||
AM.cls_id(spid);
|
||||
AM.cls_id(spid + 61);
|
||||
}).start();
|
||||
}
|
||||
if ((d.last_operate[0] == 2 || d.last_operate[0] == 4) && !d.isEnd()) {
|
||||
//加杠动画 明杠动画
|
||||
if (!AM.is_play(2394)) {
|
||||
AM.add(2394).bfunc(function () {
|
||||
set_self(2394, 37, 1, 0, 0);
|
||||
set_self(2394, 43, 2, 0, 0);
|
||||
}).wait(3, function () {
|
||||
set_self(2394, 43, 3, 0, 0);
|
||||
}).wait(3, function () {
|
||||
set_self(2394, 43, 4, 0, 0);
|
||||
}).wait(3, function () {
|
||||
set_self(2394, 43, 5, 0, 0);
|
||||
}).wait(3, function () {
|
||||
set_self(2394, 43, 6, 0, 0);
|
||||
}).wait(3, function () {
|
||||
set_self(2394, 43, 2, 0, 0);
|
||||
}).wait(3, function () {
|
||||
set_self(2394, 43, 3, 0, 0);
|
||||
}).wait(3, function () {
|
||||
set_self(2394, 43, 4, 0, 0);
|
||||
}).wait(3, function () {
|
||||
set_self(2394, 43, 5, 0, 0);
|
||||
}).wait(3, function () {
|
||||
set_self(2394, 43, 6, 0, 0);
|
||||
}).wait(3, function () {
|
||||
|
||||
}).func(function () {
|
||||
set_self(2394, 37, 0, 0, 0);
|
||||
set_self(2394, 43, 2, 0, 0);
|
||||
AM.cls_id(2394);
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//点击操作按钮
|
||||
RoomFunc.operate_click = function (spid_up) {
|
||||
if (get_self(1965, 37) == 1) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//战局开始,牌显示之前
|
||||
RoomFunc.showcard_before = function () {
|
||||
set_self(2874, 43, 60, 0, 0);
|
||||
//一般执行14次
|
||||
return true;
|
||||
}
|
||||
//战局开始,牌显示之后
|
||||
RoomFunc.showcard_after = function () {
|
||||
//执行一次
|
||||
console.log("roomfunc RoomConfig战局开始,牌显示之后");
|
||||
if (RoomFunc.hua()) {
|
||||
d.hualen3 = [d.hua_hua[0].length, d.hua_hua[1].length, d.hua_hua[2].length, d.hua_hua[3].length];
|
||||
d.hualen = d.hua_hua[0].length + d.hua_hua[1].length + d.hua_hua[2].length + d.hua_hua[3].length;
|
||||
if (d.hualen > 0) {
|
||||
set_self(346, 57, 1000, 0, 0);
|
||||
}
|
||||
}
|
||||
d.playerid = [];
|
||||
var persons = [4, 4, 3, 2];
|
||||
var person = persons[Desk.roomtype[6]] || 4;
|
||||
for (var i = 0; i < person; i++) {
|
||||
d.playerid.push(Desk.PlayerList[i].playerid);
|
||||
//d.grade_j.push[d.grade[i]];
|
||||
}
|
||||
}
|
||||
|
||||
//自己有摸牌,且是自己的控制權
|
||||
RoomFunc.mopai_before = function (first_card, seat) {
|
||||
//最新的牌
|
||||
console.log("roomfunc RoomConfig自己有摸牌,且是自己的控制權", first_card, seat);
|
||||
}
|
||||
//自己沒摸牌,且是自己的控制權
|
||||
RoomFunc.nomopai_before = function (seat) {
|
||||
console.log("roomfunc RoomConfig自己沒摸牌", seat);
|
||||
}
|
||||
|
||||
//要不要顯示战绩,服务器判断要不要买马动画
|
||||
RoomFunc.zhanji_before = function () {
|
||||
console.log("roomfunc RoomConfig要不要顯示战绩");
|
||||
if (RoomFunc.compare_jing() && d.compare_jing_time3 == 0) {
|
||||
if (get_self(2377, 37) == 0) {
|
||||
set_self(2377, 37, 1);
|
||||
}
|
||||
d.compare_jing_time3 = 1;
|
||||
} else if (RoomFunc.buyhorse() && d.horse_time == 0) {
|
||||
d.horse_time = 1;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//一小局的结束,显示了牌之后,还没有显示动画
|
||||
RoomFunc.turn_over = function () {
|
||||
for (var i = 936; i <= 954; i++) {
|
||||
set_self(i, 1, 503, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//游戲中战绩显示,在其他数据全部显示之后
|
||||
RoomFunc.game_show_settle = function (turn, identity, names, avatar, playerids, hand, turn_point, buyHorse, winHorse, Horse_vic_def, final_hu, settlePoint, hu_note_gang, roomtype, many_hu, start_hu, piao, sea_hua, peng_chi_num, hu_note_gang_jing, putJing, jing, jing_reduce) {
|
||||
|
||||
}
|
||||
|
||||
//大厅战绩显示,在其他数据全部显示之后,与上面的
|
||||
RoomFunc.game_out_show_settle = function (js, js1) {
|
||||
|
||||
}
|
||||
//绘制接口
|
||||
RoomFunc.draw = function (spid) {
|
||||
|
||||
}
|
||||
//超时自动出牌
|
||||
RoomFunc.Overtime_chupai = function () {
|
||||
var Overtime_chupai = Desk.roomtype[18];
|
||||
if (Overtime_chupai == 2) {//快版
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//托管
|
||||
RoomFunc.tuoguan = function (mode) {
|
||||
mode = mode || 0;
|
||||
if (get_self(2233, 43) == 1 && mode == 0) {
|
||||
set_self(2233, 43, 2, 0, 0)
|
||||
d.show_tuoguan();
|
||||
} else if (mode == 0 || mode == 1) {
|
||||
set_self(2233, 43, 1, 0, 0)
|
||||
d.OverTime = 0;
|
||||
set_group(221, 37, 0, 0, 0);
|
||||
if(d.user_ctrl[2] == C_Player.seat) {
|
||||
//set_self (2895,37,1,0,0);
|
||||
set_self (2896,37,1,0,0);
|
||||
set_self (2897,37,1,0,0);
|
||||
}
|
||||
d.jishi_chu = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//财神
|
||||
RoomFunc.god = function () {
|
||||
return false;
|
||||
}
|
||||
//财神
|
||||
RoomFunc.mammon = function () {
|
||||
var mammon = Desk.roomtype[11];
|
||||
if (mammon == 1) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//精分
|
||||
RoomFunc.jingscore = function () {
|
||||
return false;
|
||||
}
|
||||
|
||||
//比精
|
||||
RoomFunc.compare_jing = function () {
|
||||
return false;
|
||||
}
|
||||
|
||||
//买马
|
||||
RoomFunc.buyhorse = function () {
|
||||
return false;
|
||||
}
|
||||
|
||||
//可以多人胡
|
||||
RoomFunc.canManyHu = function () {
|
||||
return true;
|
||||
}
|
||||
|
||||
//花牌算分
|
||||
RoomFunc.huascore = function () {
|
||||
return false;
|
||||
}
|
||||
//花牌配置
|
||||
RoomFunc.hua = function () {
|
||||
return false;
|
||||
}
|
||||
|
||||
//有抄庄
|
||||
RoomFunc.can_chao_host = function () {
|
||||
return false;
|
||||
}
|
||||
|
||||
//血战玩法
|
||||
RoomFunc.xue_zhan = function () {
|
||||
return true;
|
||||
}
|
||||
|
||||
//不同张牌数玩法
|
||||
RoomFunc.num_pai = function () {
|
||||
if (false) {
|
||||
return 7;
|
||||
} else if (true) {
|
||||
return 10;
|
||||
} else if (false) {
|
||||
return 13;
|
||||
}
|
||||
return 13;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,785 @@
|
||||
RoomFunc.card_help = (function () {
|
||||
|
||||
var weight = {
|
||||
'1': 14,
|
||||
'2': 15,
|
||||
'3': 3,
|
||||
'4': 4,
|
||||
'5': 5,
|
||||
'6': 6,
|
||||
'7': 7,
|
||||
'8': 8,
|
||||
'9': 9,
|
||||
'10': 10,
|
||||
'11': 11,
|
||||
'12': 12,
|
||||
'13': 13,
|
||||
'16': 16,
|
||||
'17': 17
|
||||
}
|
||||
|
||||
var PaiConfig = {
|
||||
'danshunNum': 5,
|
||||
'duishunNum': 2,
|
||||
'sandaiOrNot': 0,
|
||||
'last4': 0
|
||||
};
|
||||
|
||||
//数组去重
|
||||
Array.unique = function (array) {
|
||||
var obj = {};
|
||||
var back = [];
|
||||
array.forEach(item => {
|
||||
!obj[item] && (obj[item] = 1, back.push(item));
|
||||
})
|
||||
return back;
|
||||
}
|
||||
|
||||
//对象拷贝
|
||||
Object.copyObject = function (obj) {
|
||||
return JSON.parse(JSON.stringify(obj));
|
||||
}
|
||||
|
||||
return function (handCards, putCards, pdkConfig) {
|
||||
|
||||
if (typeof (pdkConfig) != 'undefined') {
|
||||
PaiConfig = pdkConfig;
|
||||
}
|
||||
var handArray = convertCard(handCards);
|
||||
var putArray = convertCard(putCards);
|
||||
var putType = getType(putArray);
|
||||
try {
|
||||
var hasSameType = enumCards(handArray, putArray, putType);
|
||||
} catch (e) {
|
||||
var hasSameType = [];
|
||||
}
|
||||
return convertBack(hasSameType, handArray);
|
||||
}
|
||||
|
||||
function convertBack(array, handArray) {
|
||||
if (!Array.isArray(array) || array.length == 0) return [];
|
||||
var len = array.length;
|
||||
var result = [];
|
||||
var temp;
|
||||
for (var i = 0; i < len; i++) {
|
||||
temp = realConvert(array[i], handArray);
|
||||
result.push(temp);
|
||||
}
|
||||
return result;
|
||||
|
||||
function realConvert(inArray, handArray) {
|
||||
var len = inArray.length;
|
||||
var handLen = handArray.length;
|
||||
var result = [];
|
||||
var outer = 0;
|
||||
var inter = 0;
|
||||
while (outer < len) {
|
||||
while (inter < handLen) {
|
||||
var item = handArray[inter];
|
||||
if (item.weight == inArray[outer] && inArray.indexOf(item.orgin == -1)) {
|
||||
result.push(item.orgin);
|
||||
outer++;
|
||||
if (result.length == len) return result;
|
||||
}
|
||||
inter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getZha(countAll) {
|
||||
var temp = [];
|
||||
for (var item in countAll) {
|
||||
if (countAll[item] == 4) {
|
||||
var value = parseInt(item);
|
||||
temp.push([value, value, value, value]);
|
||||
}
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
|
||||
function enumCards(orignArray, targetArray, putType) {
|
||||
function filterResult(parm) {
|
||||
if (result.length != 0) {
|
||||
var len = result.length;
|
||||
var temp = [];
|
||||
for (var i = 0; i < len; i++) {
|
||||
if (countBaseAll[result[i][0]] == parm) {
|
||||
temp.push(result[i]);
|
||||
}
|
||||
}
|
||||
if (temp.length > 0) {
|
||||
result = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var countBaseAll = countAll(orignArray);
|
||||
var zhaAcount = getZha(countBaseAll);
|
||||
var result = [];
|
||||
switch (putType.type) {
|
||||
case 'dan':
|
||||
for (var item in countBaseAll) {
|
||||
var temp = parseInt(item)
|
||||
temp > putType.value && result.push([temp]);
|
||||
}
|
||||
filterResult(1);
|
||||
break;
|
||||
case 'dui':
|
||||
for (var item in countBaseAll) {
|
||||
var num = countBaseAll[item];
|
||||
var temp = parseInt(item)
|
||||
if ((num > 1) && temp > putType.value) {
|
||||
result.push([temp, temp]);
|
||||
}
|
||||
}
|
||||
filterResult(2);
|
||||
break;
|
||||
case "liandui":
|
||||
for (var item in countBaseAll) {
|
||||
var temp = parseInt(item);
|
||||
if (temp == 15) break;
|
||||
if (temp > putType.value[0]) {
|
||||
var build = buildArray(temp, putType.count);
|
||||
if (hasPair(build, countBaseAll, 2)) {
|
||||
result.push(doubleArray(build));
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "shun":
|
||||
var hasValue = [];
|
||||
var baseLen = putType.value.length;
|
||||
var start = putType.value[0];
|
||||
for (var item in countBaseAll) {
|
||||
var value = parseInt(item);
|
||||
value < 15 && hasValue.push(parseInt(item));
|
||||
}
|
||||
hasValue.sort((a, b) => {
|
||||
return a - b
|
||||
});
|
||||
var len = hasValue.length - baseLen;
|
||||
for (var i = 0; i <= len; i++) {
|
||||
var tempArr = hasValue.slice(i);
|
||||
if (tempArr[0] > start && shun(tempArr, baseLen)) {
|
||||
result.push(createShun(tempArr[0], baseLen));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "zha":
|
||||
for (var item in countBaseAll) {
|
||||
var temp = parseInt(item);
|
||||
if (temp > putType.value && countBaseAll[item] == 4) {
|
||||
result.push([temp, temp, temp, temp]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "sanDai":
|
||||
for (var item in countBaseAll) {
|
||||
var temp = parseInt(item);
|
||||
if (temp > putType.value[0] && countBaseAll[item] == 3) {
|
||||
var wasteCard = PaiConfig.sandaiOrNot ? getWasteCard(Object.copyObject(countBaseAll), [temp]) : [];
|
||||
result.push([temp, temp, temp].concat(wasteCard).sort((a, b) => {
|
||||
return a - b
|
||||
}));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "plane":
|
||||
for (var item in countBaseAll) {
|
||||
var temp = parseInt(item);
|
||||
if (temp > putType.value[0] && countBaseAll[item] >= 3) {
|
||||
var build = buildArray(temp, putType.count);
|
||||
if (hasPair(build, countBaseAll, 3)) {
|
||||
var temp = [];
|
||||
var wasteCard = PaiConfig.sandaiOrNot ? getWasteCard(Object.copyObject(countBaseAll), build) : [];
|
||||
build.forEach(item => {
|
||||
temp = temp.concat([item, item, item]);
|
||||
})
|
||||
temp = temp.concat(wasteCard).sort((a, b) => {
|
||||
return a - b;
|
||||
});
|
||||
result.push(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (putType.type != "zha" && zhaAcount.length > 0) {
|
||||
zhaAcount.forEach(item => {
|
||||
result.push(item);
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function createShun(start, len) {
|
||||
var array = [];
|
||||
for (var i = 0; i < len; i++) {
|
||||
array.push(start + i);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
function doubleArray(array) {
|
||||
var temp = [];
|
||||
array.forEach(item => {
|
||||
temp = temp.concat([item, item]);
|
||||
})
|
||||
return temp;
|
||||
}
|
||||
|
||||
function getWasteCard(obj, judgeArray) {
|
||||
var needNum = judgeArray.length * 2;
|
||||
var countValue = [{}, {}, {}, {}];
|
||||
var array = [];
|
||||
var count = 0;
|
||||
var lastValue = [];
|
||||
countValue.num = 0;
|
||||
for (var item in obj) {
|
||||
if (judgeArray.indexOf(parseInt(item)) != -1) {
|
||||
obj[item] -= 3;
|
||||
if (obj[item] == 0) continue;
|
||||
}
|
||||
var value = obj[item];
|
||||
countValue[value - 1][item] = value;
|
||||
countValue.num += value;
|
||||
}
|
||||
for (var i = 0; i < 4; i++) {
|
||||
fitValue(countValue[i], i + 1);
|
||||
}
|
||||
if (count < needNum) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (JSON.stringify(countValue[i]) == '{}') continue;
|
||||
for (var item in countValue[i]) {
|
||||
var value = parseInt(item);
|
||||
lastValue = lastValue.concat(new Array(countValue[i][item]).fill(value));
|
||||
}
|
||||
}
|
||||
if (lastValue.length > 0) {
|
||||
lastValue.sort((a, b) => {
|
||||
return a - b;
|
||||
});
|
||||
array = array.concat(lastValue.slice(0, needNum - count));
|
||||
}
|
||||
}
|
||||
|
||||
return array;
|
||||
|
||||
function fitValue(obj, number) {
|
||||
if (JSON.stringify(obj) == '{}') return;
|
||||
if (count >= needNum) return;
|
||||
for (var item in obj) {
|
||||
var value = parseInt(item);
|
||||
count += number;
|
||||
if (count <= needNum) {
|
||||
array = array.concat(new Array(number).fill(value));
|
||||
delete obj[item];
|
||||
if (count == needNum) {
|
||||
return array;
|
||||
}
|
||||
} else {
|
||||
count -= number;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function hasPair(array, obj, acount) {
|
||||
var len = array.length;
|
||||
for (var i = 0; i < len; i++) {
|
||||
var item = array[i];
|
||||
if (!obj[item]) return false;
|
||||
if (obj[item] < acount) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function buildArray(number, n) {
|
||||
var array = [];
|
||||
for (var i = 0; i < n; i++) {
|
||||
array.push(number);
|
||||
number++;
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
function countAll(orignArray) {
|
||||
var obj = {};
|
||||
orignArray.forEach(item => {
|
||||
var value = item.weight;
|
||||
obj[value] ? obj[value]++ : (obj[value] = 1);
|
||||
})
|
||||
return obj;
|
||||
}
|
||||
|
||||
function getWeight(target) {
|
||||
var obj = [];
|
||||
target.forEach(item => {
|
||||
obj.push(item.weight);
|
||||
});
|
||||
return obj;
|
||||
}
|
||||
|
||||
//卡牌类型转换
|
||||
function convertCard(array) {
|
||||
var backArray = [];
|
||||
var len = array.length;
|
||||
var item;
|
||||
for (var i = 0; i < len; i++) {
|
||||
item = {};
|
||||
item.value = array[i] % 20;
|
||||
item.color = parseInt(array[i] / 20);
|
||||
item.weight = weight[item.value];
|
||||
item.orgin = array[i];
|
||||
backArray.push(item);
|
||||
}
|
||||
|
||||
sortCard(backArray);
|
||||
return backArray;
|
||||
}
|
||||
|
||||
//卡牌权重排序
|
||||
function sortCard(array) {
|
||||
Array.prototype.sort.call(array, (a, b) => {
|
||||
var flag = a.weight - b.weight;
|
||||
return flag == 0 ? a.color - b.color : flag;
|
||||
})
|
||||
}
|
||||
|
||||
//获取打出的牌类型
|
||||
function getType(cards) {
|
||||
var valueArray = [];
|
||||
cards.forEach(item => {
|
||||
valueArray.push(item.weight);
|
||||
});
|
||||
var type = null;
|
||||
|
||||
type = judgeDan(valueArray, type);
|
||||
type = judgeDui(valueArray, type);
|
||||
type = judgeShun(valueArray, type);
|
||||
type = judgeZha(valueArray, type);
|
||||
type = judgePlane(valueArray, type);
|
||||
return type;
|
||||
}
|
||||
|
||||
//单牌
|
||||
function judgeDan(array, type) {
|
||||
if (type) return type;
|
||||
if (array.length == 1 && !type) {
|
||||
type = {type: "dan", count: 1, value: array[0]};
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
//对子,包括连对
|
||||
function judgeDui(array, type) {
|
||||
if (type) return type;
|
||||
var judge = Array.unique(array);
|
||||
var tempArr = doubleArray(judge);
|
||||
var len = judge.length;
|
||||
var num = PaiConfig.duishunNum;
|
||||
if (tempArr.toString() == array.toString()) {
|
||||
if (judge.length == 1) {
|
||||
type = {type: "dui", count: 1, value: judge[0]}
|
||||
} else if (shun(judge, num)) {
|
||||
type = {type: "liandui", count: len, value: judge}
|
||||
}
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
//检测炸弹
|
||||
function judgeZha(array, type) {
|
||||
if (type) return type;
|
||||
if (same(array, 4)) {
|
||||
type = {type: "zha", count: 1, value: array[0]}
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
//检测顺子
|
||||
function judgeShun(array, type) {
|
||||
if (type) return type;
|
||||
var num = PaiConfig.danshunNum;
|
||||
if (shun(array, num)) {
|
||||
type = {type: "shun", count: 1, value: [].concat(array)};
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
//检测3带2或者飞机
|
||||
function judgePlane(array, type) {
|
||||
if (type) return type;
|
||||
var obj = {};
|
||||
var count_three = 0;
|
||||
var len = array.length;
|
||||
var value = [];
|
||||
array.forEach(item => {
|
||||
!obj[item] ? (obj[item] = 1) : obj[item]++;
|
||||
});
|
||||
for (var item in obj) {
|
||||
if (obj[item] >= 3) {
|
||||
count_three++;
|
||||
value.push(parseInt(item));
|
||||
}
|
||||
}
|
||||
value.sort((a, b) => {
|
||||
return a - b;
|
||||
});
|
||||
var count = Math.ceil(len / 5);
|
||||
|
||||
if (value.length > count) {
|
||||
value = getValue(count, value);
|
||||
}
|
||||
|
||||
type = {type: "sanDai", count: value.length, value: value};
|
||||
if (type.count > 1) type.type = "plane";
|
||||
return type;
|
||||
|
||||
function getValue(count, value) {
|
||||
var len = value.length;
|
||||
var doFor = len - count;
|
||||
value.reverse();
|
||||
var temp;
|
||||
for (var i = 0; i <= doFor; i++) {
|
||||
temp = value.slice(i, i + count);
|
||||
if (shun(temp)) {
|
||||
value = temp;
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
//检测顺子
|
||||
function shun(array, count) {
|
||||
if (!Array.isArray(array)) return false;
|
||||
var len = array.length;
|
||||
if (array.length == 0) return false;
|
||||
if (count && count > len) return false;
|
||||
array.sort((a, b) => {
|
||||
return a - b;
|
||||
});
|
||||
var temp = array[0];
|
||||
for (var i = 0; i < count; i++) {
|
||||
if (array[i] != temp + i) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//检测同张
|
||||
function same(array, count) {
|
||||
if (!Array.isArray(array)) return false;
|
||||
var len = array.length;
|
||||
if (count != len) return false;
|
||||
var temp = array[0];
|
||||
for (var i = 0; i < count; i++) {
|
||||
if (array[i] != temp) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}());
|
||||
|
||||
RoomFunc.tip_put_card = function (hand, pdkConfig) {
|
||||
var result = {};
|
||||
result.weight = [];
|
||||
var backArr = [];
|
||||
if (hand && Object.prototype.toString.call(hand) === '[object Array]' && hand.length) {
|
||||
var jing = [];
|
||||
var arr = [].concat(hand);
|
||||
ord(arr);
|
||||
arr.includes(101) && arr.splice(arr.indexOf(101), 1) && jing.push(101);
|
||||
arr.includes(102) && arr.splice(arr.indexOf(102), 1) && jing.push(102);
|
||||
if (!arr.length) {
|
||||
return hand;
|
||||
}
|
||||
var processArr = [].concat(arr);
|
||||
processArr = processArr.map(function (item) { //处理手牌
|
||||
item = item % 20;
|
||||
if (item < 3) {
|
||||
return item + 13;
|
||||
}
|
||||
return item;
|
||||
});
|
||||
ord(processArr); //手牌排序
|
||||
var single = [],
|
||||
duizi = [],
|
||||
kezi = [],
|
||||
shunzi = [],
|
||||
liandui = [],
|
||||
feiji = [],
|
||||
zha = [];
|
||||
var countObj = [{}, {}, {}, {}];
|
||||
processArr.forEach(function (item) {
|
||||
processArr.indexOf(item) === processArr.lastIndexOf(item) && !single.includes(item) && single.push(item) && (countObj[0][item] = 1);
|
||||
processArr.indexOf(item) + 1 === processArr.lastIndexOf(item) && !duizi.includes(item) && duizi.push(item) && (countObj[1][item] = 2);
|
||||
processArr.indexOf(item) + 2 === processArr.lastIndexOf(item) && !kezi.includes(item) && kezi.push(item) && (countObj[2][item] = 3);
|
||||
processArr.indexOf(item) + 3 === processArr.lastIndexOf(item) && !zha.includes(item) && zha.push(item) && (countObj[3][item] = 4);
|
||||
});
|
||||
|
||||
var arr1 = [];
|
||||
processArr.filter(function (item) { //手牌去重
|
||||
return arr1.includes(item) ? '' : arr1.push(item);
|
||||
});
|
||||
|
||||
shunzi = arr1.length ? check_shunzi(arr1, pdkConfig.danshunNum) : [];
|
||||
liandui = duizi.length ? check_liandui(duizi, pdkConfig.duishunNum) : [];
|
||||
feiji = kezi.length ? check_feiji(kezi, 2) : [];
|
||||
var s = shunzi.length && shunzi.reduce(function (prev, cur) {
|
||||
return prev.concat(cur);
|
||||
});
|
||||
if (s) {
|
||||
single = single.filter(function (item) {
|
||||
return !s.includes(item);
|
||||
});
|
||||
duizi = duizi.filter(function (item) {
|
||||
return !s.includes(item);
|
||||
});
|
||||
}
|
||||
process(liandui, 'liandui');
|
||||
process(shunzi, 'shunzi');
|
||||
process(duizi, 'duizi');
|
||||
process(single, 'single');
|
||||
process(kezi, 'kezi');
|
||||
process(feiji, 'feiji');
|
||||
process(zha, 'zha');
|
||||
|
||||
jing.length && (result[4] = jing);
|
||||
}
|
||||
return sortResult();
|
||||
|
||||
function sortResult() {
|
||||
var array = ['feiji', 'shunzi', 'liandui'];
|
||||
if (pdkConfig.sandaiOrNot) {
|
||||
array.push('kezi');
|
||||
}
|
||||
result.weight.sort(function (a, b) {
|
||||
return a[1] - b[1];
|
||||
});
|
||||
var len = result.weight.length;
|
||||
for (var i = 0; i < len; i++) {
|
||||
array.push(result.weight[i][0]);
|
||||
}
|
||||
array.push('zha');
|
||||
var lastLen = array.length;
|
||||
var temp;
|
||||
var tempLen;
|
||||
for (var i = 0; i < lastLen; i++) {
|
||||
var temp = result[array[i]];
|
||||
if (temp) {
|
||||
tempLen = temp.length;
|
||||
for (var j = 0; j < tempLen; j++) {
|
||||
backArr.push(temp[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return backArr;
|
||||
}
|
||||
|
||||
function process(array, type) {
|
||||
if (!array || !array.length) return;
|
||||
var temp;
|
||||
switch (type) {
|
||||
case 'liandui':
|
||||
temp = array.map(function (item) {
|
||||
return convert(multArr(item, 2), hand);
|
||||
});
|
||||
break;
|
||||
case 'shunzi':
|
||||
temp = array.map(function (item) {
|
||||
return convert(item, hand);
|
||||
});
|
||||
break;
|
||||
case 'duizi':
|
||||
result.weight.push(['duizi', array[0]]);
|
||||
temp = array.map(function (item) {
|
||||
return convert([item, item], hand);
|
||||
});
|
||||
break;
|
||||
case 'single':
|
||||
result.weight.push(['single', array[0]]);
|
||||
temp = array.map(function (item) {
|
||||
return convert([item], hand);
|
||||
});
|
||||
break;
|
||||
case 'zha':
|
||||
temp = array.map(function (item) {
|
||||
return convert([item, item, item, item], hand);
|
||||
});
|
||||
break;
|
||||
case 'kezi':
|
||||
!pdkConfig.sandaiOrNot && result.weight.push(['kezi', array[0]]);
|
||||
temp = array.map(function (item) {
|
||||
return convert([item, item, item].concat(getWasteCard([item])), hand);
|
||||
});
|
||||
break;
|
||||
case 'feiji':
|
||||
temp = array.map(function (item) {
|
||||
return convert(multArr(item, 3).concat(getWasteCard(item)), hand);
|
||||
});
|
||||
break;
|
||||
}
|
||||
result[type] = temp;
|
||||
}
|
||||
|
||||
function multArr(array, num) {
|
||||
var temp = [].concat(array);
|
||||
var back = [];
|
||||
for (var i = 0; i < num; i++) {
|
||||
back = back.concat(temp);
|
||||
}
|
||||
return back;
|
||||
}
|
||||
|
||||
function ord(arr) {
|
||||
arr.sort(function (a, b) {
|
||||
return a - b;
|
||||
});
|
||||
}
|
||||
|
||||
function getWasteCard(judgeArray) {
|
||||
if (!pdkConfig.sandaiOrNot) {
|
||||
return [];
|
||||
}
|
||||
var num = pdkConfig.daiNum ? pdkConfig.daiNum : 2;
|
||||
var judgeLen = judgeArray.length;
|
||||
var needNum = judgeLen * num;
|
||||
|
||||
var countValue = copyObj(countObj);
|
||||
countValue.num = processArr.length;
|
||||
var array = [];
|
||||
var count = 0;
|
||||
var lastValue = [];
|
||||
|
||||
var temp;
|
||||
for (var i = 2; i < 4; i++) {
|
||||
for (var j = 0; j < judgeLen; j++) {
|
||||
temp = countValue[i][judgeArray[j]];
|
||||
if (temp) {
|
||||
temp -= 3;
|
||||
countValue.num -= 3;
|
||||
if (temp == 0) {
|
||||
delete countValue[i][judgeArray[j]];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < 4; i++) {
|
||||
fitValue(countValue[i], i + 1);
|
||||
}
|
||||
if (count < needNum) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
if (JSON.stringify(countValue[i]) == '{}') continue;
|
||||
for (var item in countValue[i]) {
|
||||
var value = parseInt(item);
|
||||
lastValue = lastValue.concat(new Array(countValue[i][item]).fill(value));
|
||||
}
|
||||
}
|
||||
if (lastValue.length > 0) {
|
||||
lastValue.sort((a, b) => {
|
||||
return a - b;
|
||||
});
|
||||
array = array.concat(lastValue.slice(0, needNum - count));
|
||||
}
|
||||
}
|
||||
|
||||
return array;
|
||||
|
||||
function copyObj(obj) {
|
||||
if (typeof(obj) == 'object') {
|
||||
return JSON.parse(JSON.stringify(obj));
|
||||
}
|
||||
}
|
||||
|
||||
function fitValue(obj, number) {
|
||||
if (JSON.stringify(obj) == '{}') return;
|
||||
if (count >= needNum) return;
|
||||
for (var item in obj) {
|
||||
var value = parseInt(item);
|
||||
count += number;
|
||||
if (count <= needNum) {
|
||||
array = array.concat(new Array(number).fill(value));
|
||||
delete obj[item];
|
||||
if (count == needNum) {
|
||||
return array;
|
||||
}
|
||||
} else {
|
||||
count -= number;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function convert(arr, hand) {
|
||||
var arr1 = [].concat(hand);
|
||||
var length = arr1.length;
|
||||
var arr2 = [];
|
||||
arr2 = arr.map(function (item, index) {
|
||||
if (item > 13) {
|
||||
item = item - 13;
|
||||
}
|
||||
for (var i = 0; i < length; i++) {
|
||||
if (arr1[i] % 20 == item && arr1[i] < 100) {
|
||||
item = arr1[i];
|
||||
arr1.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return item;
|
||||
});
|
||||
arrange_pai(arr2);
|
||||
return arr2;
|
||||
}
|
||||
|
||||
function arrange_pai(hand) {
|
||||
hand.sort(function (a, b) {
|
||||
var c = a % 20;
|
||||
var d = b % 20;
|
||||
c < 3 && (c += 20);
|
||||
d < 3 && (d += 20);
|
||||
var result = d - c;
|
||||
if (d == c || a > 100 || b > 100) {
|
||||
result = b - a;
|
||||
}
|
||||
return result;
|
||||
})
|
||||
}
|
||||
|
||||
function check_shunzi(hand, num) {
|
||||
var arr = [].concat(hand);
|
||||
var result = [],
|
||||
i = 0;
|
||||
result[i] = [arr[0]];
|
||||
arr.reduce(function (prev, cur) {
|
||||
cur - prev === 1 ? result[i].push(cur) : result[++i] = [cur];
|
||||
return cur;
|
||||
});
|
||||
result = result.filter(function (item, index) {
|
||||
return item.length > num - 1;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
function check_liandui(hand, num) {
|
||||
return check_shunzi(hand, num);
|
||||
}
|
||||
|
||||
function check_feiji(hand, num) {
|
||||
return check_shunzi(hand, num);
|
||||
}
|
||||
}
|
||||
|
||||
RoomFunc.compare_array = function (obj, target) {
|
||||
var base = [].concat(obj).sort(function (a, b) {
|
||||
return a - b;
|
||||
});
|
||||
var next = [].concat(target).sort(function (a, b) {
|
||||
return a - b;
|
||||
});
|
||||
return base.toString() == next.toString();
|
||||
}
|
||||
Reference in New Issue
Block a user