1028 lines
26 KiB
Lua
1028 lines
26 KiB
Lua
-- 检测牌是否存在
|
|
local function checkCard(eventCard, cardList, num)
|
|
if num == nil then
|
|
num = 1
|
|
end
|
|
local result = 0
|
|
for i = 1, #cardList do
|
|
if (cardList[i] == eventCard) then
|
|
result = result + 1
|
|
if (result == num) then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
local function checkCard1(eventCard, cardList, num)
|
|
if num == nil then
|
|
num = 1
|
|
end
|
|
local result = 0
|
|
|
|
for k, v in pairs(cardList) do
|
|
if k == eventCard then
|
|
result = v
|
|
if result == num then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
local function GetCheckCardNum(eventCard, cardList)
|
|
local result = 0
|
|
|
|
for k, v in pairs(cardList) do
|
|
if k == eventCard then
|
|
result = v
|
|
return v
|
|
end
|
|
end
|
|
|
|
return result
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 移除指定数量的牌
|
|
local function removeCard(cardList, card, count)
|
|
for i = 1, count do
|
|
list_remove(cardList, card)
|
|
end
|
|
end
|
|
|
|
local function checkCardAndRomve(eventCard, cardList, num)
|
|
if (checkCard(eventCard, cardList, num)) then
|
|
removeCard(cardList, eventCard, num)
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- 获取列表中牌数量
|
|
local function cardNum(eventCard, cardList)
|
|
local result = 0
|
|
for i = 1, #cardList do
|
|
local card = cardList[i]
|
|
if (card == eventCard) then
|
|
result = result + 1
|
|
end
|
|
end
|
|
return result
|
|
end
|
|
|
|
local M = {
|
|
cardList = nil,
|
|
stack = nil,
|
|
stackHuxi = nil,
|
|
cbCardMap = nil,
|
|
ting_pai = true
|
|
}
|
|
|
|
function M:push(cardGroup)
|
|
self.stack[#self.stack + 1] = cardGroup
|
|
end
|
|
|
|
function M:pushhuxi(cardGroup)
|
|
self.stackHuxi[#self.stackHuxi + 1] = cardGroup
|
|
end
|
|
|
|
function M:rollBack()
|
|
local cardGroup = self.stack[#self.stack]
|
|
table.remove(self.stack, #self.stack)
|
|
for _, card in ipairs(cardGroup) do
|
|
self.cardList[#self.cardList + 1] = card
|
|
end
|
|
table.sort(self.cardList)
|
|
end
|
|
|
|
function M:tryWin(player, room)
|
|
return self:checkWinOpList(player, player.fz_list, room)
|
|
end
|
|
|
|
function M:checkWinOpList(player, opcardList, room)
|
|
local isHu = self:AnalyseChiHuCard(opcardList, room.room_config.config, room.room_config.hpData)
|
|
return isHu
|
|
end
|
|
|
|
function M:AnalyseChiHuCard(opcardList, roomConfig)
|
|
return self:AnalyseChiHuCardEx(opcardList, roomConfig)
|
|
end
|
|
|
|
function M:AnalyseChiHuCardEx(opcardList, roomConfig)
|
|
local tempCardList = membe_deep_clone(self.cbCardMap)
|
|
|
|
--//变量定义
|
|
-- List<TagAnalyseItem> tagAnalyseItemList = new ArrayList<TagAnalyseItem>();
|
|
-- List<Integer> wChiHuKind = new ArrayList<Integer>();
|
|
local tagAnalyseItemList = {}
|
|
local wChiHuKind = {}
|
|
self:AnalyseCard(tempCardList, opcardList, tagAnalyseItemList, roomConfig)
|
|
local huxi = 0
|
|
for i = 1, #tagAnalyseItemList do
|
|
huxi = huxi + tagAnalyseItemList[i].huxi
|
|
end
|
|
|
|
printlog("胡息数为=>>>", huxi)
|
|
pt(tagAnalyseItemList)
|
|
if huxi >= 11 then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function M:AnalyseCard(tempCardList, opCards, tagAnalyseItemList, config)
|
|
local cbCardCount = 0
|
|
for k, v in pairs(tempCardList) do
|
|
cbCardCount = cbCardCount + v
|
|
end
|
|
|
|
if cbCardCount < 1 or cbCardCount > 19 then return false end
|
|
|
|
|
|
--List<TagKindItem> tagKindList = new ArrayList<TagKindItem>();
|
|
local tagKindList = {}
|
|
|
|
|
|
|
|
--while false do
|
|
repeat
|
|
local cbLessKindItem = math.floor((cbCardCount - 1) / 3)
|
|
if cbLessKindItem + #opCards ~= 6 then
|
|
break
|
|
end
|
|
|
|
--//单吊判断
|
|
if cbLessKindItem == 0 then
|
|
if not ((cbCardCount == 1) and #opCards == 6) then
|
|
return false
|
|
end
|
|
|
|
for k, v in pairs(tempCardList) do
|
|
if v == 1 then
|
|
return AnalyseCardFuLuShou(cbLessKindItem, nil, k, opCards, tagAnalyseItemList, config)
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
--//拆分分析
|
|
if cbCardCount >= 3 then
|
|
for k, v in pairs(tempCardList) do
|
|
if v >= 2 and checkCard1(math.floor(k / 100) * 100 + 4, tempCardList, 1) then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Peng
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = k
|
|
kindItem.cbCardList[3] = math.floor(k / 100) * 100 + 4
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
|
|
if v >= 3 then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Peng
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = k
|
|
kindItem.cbCardList[3] = k
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
|
|
--//连牌判断
|
|
if k % 100 >= 1 and k % 100 < 4 and v > 0 then
|
|
for i = 1, v do
|
|
if cardNum(k + 1, self.cardList) >= i and cardNum(k + 2, self.cardList) >= i and (k + 1) % 100 ~= 4 and (k + 2) % 100 ~= 4 then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Chi
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = k + 1
|
|
kindItem.cbCardList[3] = k + 2
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
|
|
if cardNum(k + 1, self.cardList) >= i and (k + 1) % 100 ~= 4 and cardNum(math.floor(k / 100) * 100 + 4, self.cardList) >= i then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Chi
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = k + 1
|
|
kindItem.cbCardList[3] = math.floor(k / 100) * 100 + 4
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
|
|
|
|
if cardNum(k + 2, self.cardList) >= i and (k + 2) % 100 ~= 4 and cardNum(math.floor(k / 100) * 100 + 4, self.cardList) >= i then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Chi
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = k + 1
|
|
kindItem.cbCardList[3] = math.floor(k / 100) * 100 + 4
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--//组合分析
|
|
|
|
if #tagKindList >= cbLessKindItem then
|
|
local cbIndex = {}
|
|
for i = 1, 6 do
|
|
table.insert(cbIndex, i)
|
|
end
|
|
|
|
--TagKindItem[] pKindItem = new TagKindItem[6];
|
|
local pKindItem = {}
|
|
|
|
--local count = 0
|
|
|
|
repeat
|
|
--while true do
|
|
local cbCardMap_temp = membe_deep_clone(tempCardList)
|
|
for i = 1, cbLessKindItem do
|
|
pKindItem[i] = tagKindList[i]
|
|
end
|
|
--//数量判断
|
|
local bEnoughCard = true
|
|
for i = 1, cbLessKindItem * 3 do
|
|
local num1 = math.floor((i - 1) / 3) + 1
|
|
local num2 = i % 3
|
|
if num == 0 then
|
|
num2 = 3
|
|
end
|
|
local cbCardIndex = pKindItem[num1].cbCardList[num2]
|
|
if GetCheckCardNum(cbCardIndex, cbCardMap_temp) <= 0 then
|
|
bEnoughCard = false
|
|
break
|
|
else
|
|
if cbCardMap_temp[cbCardIndex] then
|
|
cbCardMap_temp[cbCardIndex] = cbCardMap_temp[cbCardIndex] - 1
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--//胡牌判断
|
|
|
|
if bEnoughCard == true then
|
|
local cbCardEye = 0
|
|
for k, v in pairs(cbCardMap_temp) do
|
|
if v == 1 then
|
|
cbCardEye = k
|
|
break
|
|
end
|
|
end
|
|
|
|
if cbCardEye ~= 0 then
|
|
local result = AnalyseCardFuLuShou(cbLessKindItem, pKindItem, cbCardEye, opCards,
|
|
tagAnalyseItemList, config)
|
|
if result then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--//设置索引
|
|
if cbIndex[cbLessKindItem] == #tagKindList then
|
|
local tempi = cbLessKindItem
|
|
for i = cbLessKindItem, 2, -1 do
|
|
tempi = i - 1
|
|
if (cbIndex[i - 1] + 1) ~= cbIndex[i] then
|
|
local cbNewIndex = cbIndex[i - 1]
|
|
for j = i - 1, cbLessKindItem do
|
|
cbIndex[j] = cbNewIndex + j - i + 2
|
|
end
|
|
break
|
|
end
|
|
end
|
|
|
|
if tempi == 1 then break end
|
|
else
|
|
cbIndex[cbLessKindItem] = cbIndex[cbLessKindItem] + 1
|
|
end
|
|
until (false)
|
|
--end
|
|
----
|
|
end
|
|
|
|
|
|
if #tagAnalyseItemList > 0 then break end
|
|
|
|
|
|
--end
|
|
until (true)
|
|
|
|
tagKindList = {}
|
|
|
|
|
|
repeat
|
|
--while false do
|
|
|
|
local cbLessKindItem = math.floor((cbCardCount - 4) / 3)
|
|
if cbLessKindItem + #opCards ~= 5 then
|
|
break
|
|
end
|
|
|
|
|
|
--//单吊判断
|
|
if cbLessKindItem == 0 then
|
|
if not ((cbCardCount == 4) and #opCards == 5) then
|
|
return false
|
|
end
|
|
|
|
--//牌眼判断
|
|
-- ArrayList<ITArray> eyeList = new ArrayList<ITArray>();
|
|
-- ArrayList<Integer> eyeCardList = new ArrayList<Integer>();
|
|
local eyeList = {}
|
|
local eyeCardList = {}
|
|
|
|
for k, v in pairs(tempCardList) do
|
|
if v > 0 then
|
|
for i = 1, v do
|
|
table.insert(eyeCardList, k)
|
|
end
|
|
end
|
|
end
|
|
|
|
if #eyeCardList ~= 4 then return false end
|
|
|
|
if math.floor(eyeCardList[1] / 100) == math.floor(eyeCardList[2] / 100) and math.floor(eyeCardList[3] / 100) == math.floor(eyeCardList[4] / 100) then
|
|
local card1 = eyeCardList[1]
|
|
local card2 = eyeCardList[2]
|
|
local card3 = eyeCardList[3]
|
|
local card4 = eyeCardList[4]
|
|
local result = AnalyseCardFuLuShouJiang(cbLessKindItem, nil, card1, card2, card3, card4, opCards,
|
|
tagAnalyseItemList, config)
|
|
if result then
|
|
return true
|
|
end
|
|
end
|
|
|
|
|
|
if math.floor(eyeCardList[1] / 100) == math.floor(eyeCardList[3] / 100) and math.floor(eyeCardList[2] / 100) == math.floor(eyeCardList[4] / 100) then
|
|
local card1 = eyeCardList[1]
|
|
local card2 = eyeCardList[3]
|
|
local card3 = eyeCardList[2]
|
|
local card4 = eyeCardList[4]
|
|
local result = AnalyseCardFuLuShouJiang(cbLessKindItem, nil, card1, card2, card3, card4, opCards,
|
|
tagAnalyseItemList, config)
|
|
if result then
|
|
return true
|
|
end
|
|
end
|
|
|
|
if math.floor(eyeCardList[1] / 100) == math.floor(eyeCardList[4] / 100) and math.floor(eyeCardList[2] / 100) == math.floor(eyeCardList[3] / 100) then
|
|
local card1 = eyeCardList[1]
|
|
local card2 = eyeCardList[4]
|
|
local card3 = eyeCardList[3]
|
|
local card4 = eyeCardList[2]
|
|
local result = AnalyseCardFuLuShouJiang(cbLessKindItem, nil, card1, card2, card3, card4, opCards,
|
|
tagAnalyseItemList, config)
|
|
if result then
|
|
return true
|
|
end
|
|
end
|
|
|
|
|
|
if #tagAnalyseItemList > 0 then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
|
|
--//拆分分析
|
|
if cbCardCount >= 3 then
|
|
for k, v in pairs(tempCardList) do
|
|
if v >= 2 and cardNum(math.floor(k / 100) * 100 + 4, self.cardList) == 1 then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Peng
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = k
|
|
kindItem.cbCardList[3] = math.floor(k / 100) * 100 + 4
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
|
|
if v >= 3 then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Peng
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = k
|
|
kindItem.cbCardList[3] = k
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
|
|
--//连牌判断
|
|
if k % 100 >= 1 and k % 100 <= 4 and v > 0 then
|
|
for i = 1, v do
|
|
if cardNum(k + 1, self.cardList) >= i and cardNum(k + 2, self.cardList) >= i and (k + 1) % 100 ~= 4 and (k + 2) % 100 ~= 4 then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Chi
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = k + 1
|
|
kindItem.cbCardList[3] = k + 2
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
|
|
if cardNum(k + 1, self.cardList) >= i and cardNum(math.floor(k / 100) * 100 + 4, self.cardList) >= i and (k + 1) % 100 ~= 4 then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Chi
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = k + 1
|
|
kindItem.cbCardList[3] = math.floor(k / 100) * 100 + 4
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
|
|
if cardNum(k + 2, self.cardList) >= i and cardNum(math.floor(k / 100) * 100 + 4, self.cardList) >= i and (k + 2) % 100 ~= 4 then
|
|
local kindItem = {}
|
|
kindItem.type = RB_FZTypeFLS.Chi
|
|
kindItem.card = k
|
|
kindItem.cbCardList = {}
|
|
kindItem.cbCardList[1] = k
|
|
kindItem.cbCardList[2] = math.floor(k / 100) * 100 + 4
|
|
kindItem.cbCardList[3] = k + 2
|
|
table.insert(tagKindList, kindItem)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--//组合分析
|
|
if #tagKindList >= cbLessKindItem then
|
|
local cbIndex = {}
|
|
for i = 1, 5 do
|
|
table.insert(cbIndex, i - 1)
|
|
end
|
|
|
|
--TagKindItem[] pKindItem = new TagKindItem[6];
|
|
local pKindItem = {}
|
|
|
|
repeat
|
|
--while true do
|
|
local cbCardMap_temp = membe_deep_clone(tempCardList)
|
|
for i = 1, cbLessKindItem do
|
|
pKindItem[i] = tagKindList[i]
|
|
end
|
|
--//数量判断
|
|
local bEnoughCard = true
|
|
for i = 1, cbLessKindItem * 3 do
|
|
local num1 = math.floor((i - 1) / 3) + 1
|
|
local num2 = i % 3
|
|
if num == 0 then
|
|
num2 = 3
|
|
end
|
|
local cbCardIndex = pKindItem[num1].cbCardList[num2]
|
|
if GetCheckCardNum(cbCardIndex, cbCardMap_temp) <= 0 then
|
|
bEnoughCard = false
|
|
break
|
|
else
|
|
if cbCardMap_temp[cbCardIndex] then
|
|
cbCardMap_temp[cbCardIndex] = cbCardMap_temp[cbCardIndex] - 1
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--//胡牌判断
|
|
|
|
if bEnoughCard == true then
|
|
--//牌眼判断
|
|
-- ArrayList<ITArray> eyeList = new ArrayList<ITArray>();
|
|
-- ArrayList<Integer> eyeCardList = new ArrayList<Integer>();
|
|
local eyeList = {}
|
|
local eyeCardList = {}
|
|
|
|
for k, v in pairs(tempCardList) do
|
|
if v > 0 then
|
|
for i = 1, v do
|
|
table.insert(eyeCardList, k)
|
|
end
|
|
end
|
|
end
|
|
|
|
if #eyeCardList ~= 4 then return false end
|
|
|
|
if math.floor(eyeCardList[1] / 100) == math.floor(eyeCardList[2] / 100) and math.floor(eyeCardList[3] / 100) == math.floor(eyeCardList[4] / 100) then
|
|
local card1 = eyeCardList[1]
|
|
local card2 = eyeCardList[2]
|
|
local card3 = eyeCardList[3]
|
|
local card4 = eyeCardList[4]
|
|
local result = AnalyseCardFuLuShouJiang(cbLessKindItem, nil, card1, card2, card3, card4, opCards,
|
|
tagAnalyseItemList, config)
|
|
if result then
|
|
return true
|
|
end
|
|
end
|
|
|
|
|
|
if math.floor(eyeCardList[1] / 100) == math.floor(eyeCardList[3] / 100) and math.floor(eyeCardList[2] / 100) == math.floor(eyeCardList[4] / 100) then
|
|
local card1 = eyeCardList[1]
|
|
local card2 = eyeCardList[3]
|
|
local card3 = eyeCardList[2]
|
|
local card4 = eyeCardList[4]
|
|
local result = AnalyseCardFuLuShouJiang(cbLessKindItem, nil, card1, card2, card3, card4, opCards,
|
|
tagAnalyseItemList, config)
|
|
if result then
|
|
return true
|
|
end
|
|
end
|
|
|
|
if math.floor(eyeCardList[1] / 100) == math.floor(eyeCardList[4] / 100) and math.floor(eyeCardList[2] / 100) == math.floor(eyeCardList[3] / 100) then
|
|
local card1 = eyeCardList[1]
|
|
local card2 = eyeCardList[4]
|
|
local card3 = eyeCardList[3]
|
|
local card4 = eyeCardList[2]
|
|
local result = AnalyseCardFuLuShouJiang(cbLessKindItem, nil, card1, card2, card3, card4, opCards,
|
|
tagAnalyseItemList, config)
|
|
if result then
|
|
return true
|
|
end
|
|
end
|
|
|
|
if #tagAnalyseItemList > 0 then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--//设置索引
|
|
if cbIndex[cbLessKindItem] == #tagKindList then
|
|
local tempi = cbLessKindItem
|
|
for i = cbLessKindItem, 2, -1 do
|
|
tempi = i - 1
|
|
if (cbIndex[i - 1] + 1) ~= cbIndex[i] then
|
|
local cbNewIndex = cbIndex[i - 1]
|
|
for j = i - 1, cbLessKindItem do
|
|
cbIndex[j] = cbNewIndex + j - i + 2
|
|
end
|
|
break
|
|
end
|
|
end
|
|
|
|
if tempi == 1 then break end
|
|
else
|
|
cbIndex[cbLessKindItem] = cbIndex[cbLessKindItem] + 1
|
|
end
|
|
until (false)
|
|
--end
|
|
--
|
|
end
|
|
|
|
if #tagAnalyseItemList > 0 then break end
|
|
|
|
--end
|
|
until (true)
|
|
|
|
if #tagAnalyseItemList > 0 then return true end
|
|
|
|
return false
|
|
end
|
|
|
|
function M:AnalyseCardFuLuShou(cbLessKindItem, pKindItem, eyeCard, opCards, tagAnalyseItemList, config)
|
|
printlog("AnalyseCardFuLuShou===>>>")
|
|
local AnalyseItem = {}
|
|
AnalyseItem.huxi = 0
|
|
AnalyseItem.cbCardEye = 0
|
|
AnalyseItem.cbOpCard = {}
|
|
AnalyseItem.cbCardEyeList = {}
|
|
--//设置结果
|
|
for i = 1, #opCards do
|
|
local src_card = opCards[i]
|
|
local op_card = {}
|
|
op_card.type = src_card.type
|
|
op_card.card = src_card.card
|
|
|
|
table.insert(AnalyseItem.cbOpCard, src_card)
|
|
if src_card.type == RB_FZTypeFLS.Chi then
|
|
if IsShangDaRenFuLuShou(src_card.card) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
elseif src_card.type == RB_FZTypeFLS.Peng then
|
|
if IsShangFu(src_card.card) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 3 * 4
|
|
else
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 2
|
|
end
|
|
else
|
|
if IsShangFu(src_card.card) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4 * 4
|
|
else
|
|
if config["gang_zhao_liu_xi"] then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 6
|
|
else
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--//设置牌型
|
|
if pKindItem then
|
|
for i = 1, cbLessKindItem do
|
|
local op_card = {}
|
|
op_card.type = pKindItem[i].type
|
|
op_card.card = pKindItem[i].card
|
|
table.insert(AnalyseItem.cbOpCard, op_card)
|
|
if op_card.type == RB_FZTypeFLS.Chi then
|
|
if IsShangDaRenFuLuShou(op_card.card) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
elseif op_card.type == RB_FZTypeFLS.Peng then
|
|
if IsShangFu(op_card.card) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 3 * 4
|
|
else
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 3
|
|
end
|
|
else
|
|
if IsShangFu(op_card.card) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4 * 4
|
|
else
|
|
if config["gang_zhao_liu_xi"] then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 6
|
|
else
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if eyeCard > 0 then
|
|
AnalyseItem.cbCardEye = eyeCard
|
|
if IsShangFu(eyeCard) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 8
|
|
elseif IsDaRenLuShou(eyeCard) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
elseif eyeCard == 104 or eyeCard == 804 then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 8
|
|
end
|
|
end
|
|
|
|
|
|
--//插入结果
|
|
table.insert(tagAnalyseItemList, AnalyseItem)
|
|
|
|
pt(tagAnalyseItemList)
|
|
printlog("胡息---》》》", AnalyseItem.huxi)
|
|
if AnalyseItem.huxi >= 11 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function M:AnalyseCardFuLuShouJiang(cbLessKindItem, pKindItem, card1, card2, card3, card4, opCards, tagAnalyseItemList,
|
|
config)
|
|
printlog("AnalyseCardFuLuShouJiang===>>>")
|
|
local AnalyseItem = {}
|
|
AnalyseItem.huxi = 0
|
|
AnalyseItem.cbCardEye = 0
|
|
AnalyseItem.cbOpCard = {}
|
|
AnalyseItem.cbCardEyeList = {}
|
|
|
|
--//设置结果
|
|
local diJin = false
|
|
local shangDaRenFuLuShou = false
|
|
local ban_shangDaRenFuLuShou = false
|
|
local hasKan = false
|
|
|
|
for i = 1, #opCards do
|
|
local src_card = opCards[i]
|
|
local op_card = {}
|
|
op_card.type = src_card.type
|
|
op_card.card = src_card.card
|
|
|
|
table.insert(AnalyseItem.cbOpCard, src_card)
|
|
if src_card.type == RB_FZTypeFLS.Chi then
|
|
if IsShangDaRenFuLuShou(src_card.card) then
|
|
shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
elseif src_card.type == RB_FZTypeFLS.Peng then
|
|
if IsShangFu(src_card.card) then
|
|
hasKan = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 3 * 4
|
|
else
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 2
|
|
end
|
|
else
|
|
hasKan = true
|
|
if IsShangFu(src_card.card) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4 * 4
|
|
else
|
|
if config["gang_zhao_liu_xi"] then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 6
|
|
else
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--//设置牌型
|
|
if pKindItem then
|
|
for i = 1, cbLessKindItem do
|
|
local op_card = {}
|
|
op_card.type = pKindItem[i].type
|
|
op_card.card = pKindItem[i].card
|
|
table.insert(AnalyseItem.cbOpCard, op_card)
|
|
if op_card.type == RB_FZTypeFLS.Chi then
|
|
if IsShangDaRenFuLuShou(op_card.card) then
|
|
shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
elseif op_card.type == RB_FZTypeFLS.Peng then
|
|
hasKan = true
|
|
if IsShangFu(op_card.card) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 3 * 4
|
|
else
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 3
|
|
end
|
|
else
|
|
hasKan = true
|
|
if IsShangFu(op_card.card) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4 * 4
|
|
else
|
|
if config["gang_zhao_liu_xi"] then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 6
|
|
else
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
local eyeCard1 = {}
|
|
table.insert(eyeCard1, card1)
|
|
table.insert(eyeCard1, card2)
|
|
table.insert(AnalyseItem.cbCardEyeList, eyeCard1)
|
|
|
|
|
|
local eyeCard1 = {}
|
|
table.insert(eyeCard1, card3)
|
|
table.insert(eyeCard1, card4)
|
|
table.insert(AnalyseItem.cbCardEyeList, eyeCard2)
|
|
|
|
--//一对上、福,就可以胡了
|
|
if card1 == card2 and IsShangFu(card1) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 12
|
|
elseif card1 == card2 and (card1 == 104 or card1 == 804) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 12
|
|
elseif (card1 == 101 and card2 == 104 or card2 == 101 and card1 == 104) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 12
|
|
elseif (card1 == 801 and card2 == 804 or card2 == 801 and card1 == 804) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 12
|
|
elseif ((card1 == 101 or card2 == 101) and card1 ~= card2) then
|
|
ban_shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
elseif ((card1 == 104 or card2 == 104) and card1 ~= card2) then
|
|
ban_shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
elseif ((card1 == 801 or card2 == 801) and card1 ~= card2) then
|
|
ban_shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
elseif ((card1 == 804 or card2 == 804) and card1 ~= card2) then
|
|
ban_shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
|
|
|
|
if (card3 == card4 and IsShangFu(card3)) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 12
|
|
elseif (card3 == card4 and (card3 == 104 or card3 == 804)) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 12
|
|
elseif (card3 == 101 and card4 == 104 or card4 == 101 and card3 == 104) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 12
|
|
elseif (card3 == 801 and card4 == 804 or card4 == 801 and card3 == 804) then
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 12
|
|
elseif ((card3 == 101 or card4 == 101) and card3 ~= card4) then
|
|
ban_shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
elseif ((card3 == 104 or card4 == 104) and card3 ~= card4) then
|
|
ban_shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
elseif ((card3 == 801 or card4 == 801) and card3 ~= card4) then
|
|
ban_shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
elseif ((card3 == 804 or card4 == 804) and card3 ~= card4) then
|
|
ban_shangDaRenFuLuShou = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
|
|
|
|
if shangDaRenFuLuShou or ban_shangDaRenFuLuShou or hasKan then
|
|
if (card1 ~= card2 and IsDaRen(card1) and IsDaRen(card2) or card3 ~= card4 and IsDaRen(card3) and IsDaRen(card4)) then
|
|
if not diJin then
|
|
diJin = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
end
|
|
|
|
if (card1 ~= card2 and IsLuShou(card1) and IsLuShou(card2) or card3 ~= card4 and IsLuShou(card3) and IsLuShou(card4)) then
|
|
if not diJin then
|
|
diJin = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 4
|
|
end
|
|
end
|
|
|
|
if ((card1 == card2 and not IsShangFu(card1) and card1 ~= 104 and card1 ~= 804) or
|
|
(card3 == card4 and not IsShangFu(card3) and card3 ~= 104 and card3 ~= 804)) then
|
|
if not diJin then
|
|
diJin = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 3
|
|
end
|
|
elseif ((card1 ~= card2 and ((math.floor(card1 / 100) ~= 1 and math.floor(card1 / 100) ~= 8 and card1 % 100 == 4) or (math.floor(card2 / 100) ~= 1 and math.floor(card2 / 100) ~= 8 and card2 % 100 == 4)) and not IsShangFu(card1)) or
|
|
(card3 ~= card4 and ((math.floor(card3 / 100) ~= 1 and math.floor(card3 / 100) ~= 8 and card3 % 100 == 4) or (math.floor(card4 / 100) ~= 1 and math.floor(card4 / 100) ~= 8 and card4 % 100 == 4)) and not IsShangFu(card3))) then
|
|
if not diJin then
|
|
diJin = true
|
|
AnalyseItem.huxi = AnalyseItem.huxi + 3
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--//插入结果
|
|
table.insert(tagAnalyseItemList, AnalyseItem)
|
|
|
|
pt(tagAnalyseItemList)
|
|
printlog("胡息---》》》", AnalyseItem.huxi)
|
|
if AnalyseItem.huxi >= 11 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function M:IsShangFu(card)
|
|
if card == 101 or card == 801 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function M:IsDaRen(card)
|
|
if card == 102 or card == 103 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function M:IsLuShou(card)
|
|
if card == 802 or card == 803 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function M:IsDaRenLuShou(card)
|
|
if card == 102 or card == 103 or card == 802 or card == 803 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function M:IsShangDaRen(card)
|
|
if math.floor(card / 100) == 1 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function M:IsFuLuShou(card)
|
|
if math.floor(card / 100) == 8 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function M:IsShangDaRenFuLuShou(card)
|
|
if math.floor(card / 100) == 1 or math.floor(card / 100) == 8 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
local function init(self, player, cardInhand, addCard, room)
|
|
self.stack = {}
|
|
self.stackHuxi = {}
|
|
self.cardList = membe_deep_clone(cardInhand)
|
|
if addCard then
|
|
self.cardList[#self.cardList + 1] = addCard
|
|
end
|
|
table.sort(self.cardList)
|
|
|
|
self.cbCardMap = {}
|
|
|
|
for i = 1, #self.cardList do
|
|
if self.cbCardMap[self.cardList[i]] == nil then
|
|
self.cbCardMap[self.cardList[i]] = 1
|
|
end
|
|
local num = cardNum(self.cardList[i], self.cardList)
|
|
if num > 1 then
|
|
self.cbCardMap[self.cardList[i]] = num
|
|
end
|
|
end
|
|
|
|
--printlog("cbCardMap")
|
|
--pt(self.cbCardMap)
|
|
|
|
return self:tryWin(player, room)
|
|
end
|
|
|
|
function M.tingPai(player, room)
|
|
local self = setmetatable({}, { __index = M })
|
|
local tingList = {}
|
|
local cardInhand = player.handcard_list
|
|
if not cardInhand or #cardInhand == 0 then
|
|
return tingList
|
|
end
|
|
|
|
for k = 100, 800, 100 do
|
|
for i = 1, 4 do
|
|
local tem = k + i
|
|
printlog("听牌查询=======>>>", tem)
|
|
local result = init(self, player, cardInhand, tem, room)
|
|
if result then
|
|
printlog("胡牌值为==>>>", tem)
|
|
table.insert(tingList, tem)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
return tingList
|
|
end
|
|
|
|
function M:getHuxi(room)
|
|
if room.game_id == 77 then
|
|
return 11
|
|
end
|
|
if room.game_id == 301 then
|
|
return 8
|
|
end
|
|
if room.game_id == 13 or room.game_id == 14 or room.game_id == 23 then
|
|
return 15
|
|
elseif room.game_id == 26 then
|
|
return 10
|
|
elseif room.game_id == 29 then
|
|
if room.room_config.maxPlayers == 3 then
|
|
return 15
|
|
else
|
|
return 9
|
|
end
|
|
end
|
|
end
|
|
|
|
function M:GetFzData(tem, ctype)
|
|
local huxi
|
|
if ctype == 2 then
|
|
if tem > 200 then
|
|
huxi = 6
|
|
else
|
|
huxi = 5
|
|
end
|
|
elseif ctype == 3 then
|
|
huxi = 3
|
|
elseif ctype == 4 then
|
|
huxi = 3
|
|
elseif ctype == 5 then
|
|
huxi = 3
|
|
end
|
|
return huxi
|
|
end
|
|
|
|
return M
|