hengyang_client/lua_probject/extend_project/extend/majiang/qizhiba/EXClearingView.lua

644 lines
18 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

require("Game.View.ResultView")
local Hu_Type_Name = import(".CS_Win_Type")
local EXClearingView = {}
local M = EXClearingView
function EXClearingView.new(blur_view)
setmetatable(M, {__index = ResultView})
local self = setmetatable({}, {__index = M})
self._full = true
ResultView.init(self, "ui://Main_PokeMaJiang/clearing")
self._currenIndex = 0
self._blur_view = blur_view
self._close_zone = false
self:InitMaPai()
return self
end
function M:InitMaPai()
self.maPaiCtr=self._view:GetController("mapai")
self.maPaiCtr.selectedIndex=0
self.maPaiList={}
for i=1,8 do
local tempMP=self._view:GetChild("niao"..i)
table.insert(self.maPaiList,tempMP)
end
end
function M:IsMapaiShow(niao,isShow)
if niao then
niao.visible=isShow
end
end
function M:SetMaPaiValue(niao,value)
if niao then
niao.icon='ui://Main_PokeMaJiang/' ..get_majiang_prefix(DataManager.CurrenRoom.game_id).."201_"..value
end
end
function M:SetMaPaiColor(niao,num)
niao:GetController("color").selectedIndex=num
end
function M:HideAllMapai()
for i=1,#self.maPaiList do
self:IsMapaiShow(self.maPaiList[i],false)
self:SetMaPaiColor(self.maPaiList[i],0)
end
end
function M:ShowSelectMaPai(niaoList)
if niaoList and #niaoList>0 then
self.maPaiCtr.selectedIndex=1
self:HideAllMapai()
for i=1,#niaoList do
self:IsMapaiShow(self.maPaiList[i],true)
self:SetMaPaiValue(self.maPaiList[i],niaoList[i].card)
if niaoList[i].score>0 then
self:SetMaPaiColor(self.maPaiList[i],2)
end
end
else
self.maPaiCtr.selectedIndex=0
end
end
function M:CalculatePaixingInfo(result)
self.WinList={}
if result.info_list and #result.info_list>0 then
for i=1,#result.info_list do
if result.info_list[i].win_list and #result.info_list[i].win_list>0 then
table.insert(self.WinList,result.info_list[i].win_list)
end
end
end
printlog("牌型列表====>>>")
pt(self.WinList)
end
function M:SetPaixingxiangqing(num)
for i=1,#self.PaiXingXiangQingCtrList do
if self.PaiXingXiangQingCtrList[i] then
self.PaiXingXiangQingCtrList[i].selectedIndex=num
end
end
end
function M:InitData(over, room, result, total_result, callback)
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:HideHutips()
self._callback = callback
local _overCtr = self._view:GetController("over")
local btn_confirm = self._view:GetChild("btn_confirm")
local btn_result = self._view:GetChild("btn_showResult")
local btn_close = self._view:GetChild("big_result"):GetChild("btn_close")
local _btnCtr = self._view:GetController("button")
local _sdkCtr = self._view:GetController("sdk")
local ctr_type = self._view:GetController("type")
self._view:GetChild("tex_roominfo").text = string.format("房号%s 局%s/%s %s", room.room_id, room.curren_round, room.room_config.round, os.date("%Y-%m-%d %H:%M:%S", os.time()))
self._view:GetChild("tex_gameinfo").text = string.gsub(room.room_config:GetDes2(), "\r", "")
if result then
--self:ShowSelectMaPai(result.niao)
self:CalculatePaixingInfo(result)
end
self.PaiXingXiangQingCtrList={}
local paixingxiangqing=self._view:GetChild("btn_detal")
local fanhuipaixing=self._view:GetChild("btn_fanhuipaixing")
fanhuipaixing.visible=false
paixingxiangqing.visible=true
paixingxiangqing.onClick:Add(function()
paixingxiangqing.visible=false
fanhuipaixing.visible=true
self:SetPaixingxiangqing(1)
end)
fanhuipaixing.onClick:Add(function()
paixingxiangqing.visible=true
fanhuipaixing.visible=false
self:SetPaixingxiangqing(0)
end)
if over ~= 2 then
if result.liuju then
ctr_type.selectedIndex = 3
else
local info_list = result.info_list
for i = 1, #info_list do
local is_win = info_list[i].is_win
if is_win then
if info_list[i].seat == room.self_player.seat then
ctr_type.selectedIndex = 1
else
ctr_type.selectedIndex = 2
end
end
end
end
if over == 0 then
_btnCtr.selectedIndex = 0
_sdkCtr.selectedIndex = 1
btn_confirm.onClick:Add(function()
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:PlayerReady()
self:DestroyWithCallback()
end)
self:AddClearItem(room, result.info_list, nil, over, result.niao, result.active_player)
elseif over == 1 then
_btnCtr.selectedIndex = 1
_sdkCtr.selectedIndex = 1
btn_result.onClick:Add(function()
self.maPaiCtr.selectedIndex=0
_overCtr.selectedIndex = 1
_btnCtr.selectedIndex = 0
_sdkCtr.selectedIndex = 0
if self._qsinfo_view then
self._qsinfo_view:Dispose()
end
end)
btn_close.onClick:Add(function()
ViewManager.ChangeView(ViewManager.View_Lobby)
end)
self:AddClearItem(room, result.info_list, total_result.info_list, over, result.niao, result.active_player)
end
else
_overCtr.selectedIndex = 1
self.maPaiCtr.selectedIndex=0
btn_close.onClick:Add(function()
ViewManager.ChangeView(ViewManager.View_Lobby)
end)
self:AddClearItem(room, nil, total_result.info_list, over)
end
end
function M:AddClearItem(room, data, total_data,over, niao, active_player)
local n = over + 1
local list_view1 = self._view:GetChild("player_list_1")
local list_view2 = self._view:GetChild("player_list_2")
if 0 == over or 1 == over then
table.sort(data, function(a,b) return a.seat < b.seat end)
list_view1:RemoveChildrenToPool()
for i=1,#data do
local item = list_view1:AddItemFromPool()
self:FillItemData(room, data[i], item, active_player, niao)
end
if #data == 3 then
list_view1.lineGap = 54
elseif #data == 2 then
list_view1.lineGap = 108
end
if 1 == over then
self:FillItemData2(room, total_data, list_view2)
end
elseif 2 == over then
self:FillItemData2(room, total_data, list_view2)
end
end
function M:FillItemData(room, data, item, active_player, niao)
local _gamectr = ControllerManager.GetController(GameController)
local p = room:GetPlayerBySeat(data["seat"])
item:GetChild("playerName").text = p.self_user.nick_name
item:GetChild("lab_hp").text="抓马"
local user = room:GetPlayerBySeat(data["seat"]).self_user
local head = item:GetChild('head'):GetChild('n4')
ImageLoad.Load(user.head_url, head)
-- 手牌
local hand_cards = data["hand_card"]
table.sort( hand_cards, ViewUtil.HandCardSort2)
local hand_list_view = item:GetChild("hand_card_list")
hand_list_view:RemoveChildrenToPool()
for i=1,#hand_cards do
local card = hand_list_view:AddItemFromPool()
card.icon = "ui://Main_PokeMaJiang/201_"..hand_cards[i]
end
hand_list_view.width = 52 * #hand_cards
local fz_card = p.fz_list
local fz_card_list = item:GetChild("fz_card_list")
fz_card_list.width = 157 * #fz_card * 0.8
fz_card_list:RemoveChildrenToPool()
for i=1,#fz_card do
if fz_card[i].type == FZType.Peng then
local item = fz_card_list:AddItemFromPool("ui://Main_PokeMaJiang/clearing_fz_3")
for j=1,3 do
local card = item:GetChild("card_" .. j)
card.icon = "ui://Main_PokeMaJiang/" .. self:GetPrefix() .. "201_"..fz_card[i].card
end
elseif fz_card[i].type == FZType.Chi then
local item = fz_card_list:AddItemFromPool("ui://Main_PokeMaJiang/clearing_fz_3")
for j = 1,3 do
local card = item:GetChild("card_" .. j)
card.icon = "ui://Main_PokeMaJiang/" .. self:GetPrefix() .. "201_"..fz_card[i].allCard[j]
end
elseif fz_card[i].type == FZType.Gang or fz_card[i].type == FZType.Gang_An or fz_card[i].type == FZType.Gang_Peng then
local item = fz_card_list:AddItemFromPool("ui://Main_PokeMaJiang/clearing_fz_4")
for j=1,4 do
local card = item:GetChild("card_" .. j)
if fz_card[i].type == FZType.Gang_An and j == 4 then
card.icon = "ui://Main_PokeMaJiang/201_00"
else
card.icon = "ui://Main_PokeMaJiang/" .. self:GetPrefix() .. "201_"..fz_card[i].card
end
end
end
end
local huadd = data["hu_score"]
local gangadd = data["gang_score"]
local birdadd = data["niao_score"]
local total = data["round_score"]
local geng_zhuan=data["geng_zhuan"]
local sp = " "
local str = "胡:"..huadd..""
--str = str..sp.."杠:"..gangadd.."分"
str = str..sp.."中马:"..birdadd..""
if data["mai_niao_score"] and data["mai_niao_score"]~=0 then
str = str..sp.."买马:"..data["mai_niao_score"]..""
end
if data["ma_geng_gong"] and data["ma_geng_gong"]~=0 then
str = str..sp.."马跟杠:"..data["ma_geng_gong"]..""
end
if geng_zhuan and geng_zhuan~=0 then
str = str..sp.."跟庄:"..geng_zhuan..""
end
if data["repeat_win"] and data["repeat_win"]~=0 then
str = str..sp.."连庄x"..data["repeat_win"]
end
item:GetChild("score1").text = str
-- local total_score = data["total_score"]
if total >= 0 then
item:GetChild("score2").text = "+"..total
item:GetChild("score2").grayed = false
else
item:GetChild("score2").text = total
item:GetChild("score2").grayed = true
end
--计算牌型
local totalPeson=DataManager.CurrenRoom.room_config.people_num-1
local win_list = data["win_list"]
local is_win = data["is_win"] or false
local str1=""
sp=""
if is_win then
if win_list then
if DataManager.CurrenRoom.isZiMoHu then
str1="自摸"
else
str1="接炮"
end
for i=1,#win_list do
local huName=Hu_Type_Name[win_list[i].type]
if huName then
str1=str1..sp..huName.."x"..win_list[i].score
end
end
str1=str1.." +"..huadd..""
end
else
printlog("输家============")
if DataManager.CurrenRoom.isZiMoHu then
printlog("自摸处理============")
--str1=""
if #self.WinList==1 then
for i=1,#self.WinList do
for j=1,#self.WinList[i] do
local huName=Hu_Type_Name[self.WinList[i][j].type]
if huName then
if j==1 then
str1=str1..huName.."x"..self.WinList[i][j].score
else
str1=str1..sp..huName.."x"..self.WinList[i][j].score
end
end
end
end
str1=str1.." "..huadd..""
else
printlog("服务端自摸计算异常===>>>")
end
else
printlog("非自摸处理====>>>")
--点炮 一炮多响
local yipaoduoxiang=false
if #self.WinList>1 then
yipaoduoxiang=true
end
if yipaoduoxiang then
printlog("一炮多响====>>>")
str="点炮"
local allTypeList={}
local isHas=false
for i=1,#self.WinList do
for j=1,#self.WinList[i] do
isHas=IsHasDictionary(self.WinList[i][j].type,allTypeList)
if isHas==false then
table.insert(allTypeList,self.WinList[i][j].type)
end
end
end
if #allTypeList>0 then
for i=1,#allTypeList do
local huName=Hu_Type_Name[allTypeList[i]]
if huName then
str1=str1..huName..""
end
end
str1=str1.." "..huadd..""
end
else
if p.self_user.account_id == active_player and is_win == false and not data["liuju"] then
str1="点炮"
if #self.WinList==1 then
for i=1,# self.WinList do
for j=1,#self.WinList[i] do
local huName=Hu_Type_Name[self.WinList[i][j].type]
if huName then
str1=str1..sp..huName.."x"..self.WinList[i][j].score
end
end
end
str1=str1.." "..huadd..""
else
printlog("服务端自摸计算异常===>>>")
end
end
end
end
end
--
printlog("牌型计算==>>>",str1)
--[[if data["ming_gang_num"]>0 then
str1=str1.." 明杠x"..data["ming_gang_num"]
end
if data["an_gang_num"]>0 then
str1=str1.." 暗杠x"..data["an_gang_num"]
end
if data["dian_gang_num"]>0 then
str1=str1.." 点杠x"..data["dian_gang_num"]
end
if gangadd~=0 then
if gangadd>0 then
str1=str1.." +"..gangadd.."分"
else
str1=str1.." "..gangadd.."分"
end
end--]]
if birdadd~=0 then
if birdadd>0 then
str1=str1.." 中马分数+"..birdadd..""
else
str1=str1.." 中马分数"..birdadd..""
end
end
if data["mai_niao_score"] and data["mai_niao_score"]~=0 then
if data["mai_niao_score"]>0 then
str = str..sp.."买马/罚马分数:+"..data["mai_niao_score"]..""
else
str = str..sp.."买马/罚马分数:"..data["mai_niao_score"]..""
end
end
if data["ma_geng_gong"] and data["ma_geng_gong"]~=0 then
if data["ma_geng_gong"]>0 then
str1 = str1.." 马跟杠:+"..data["ma_geng_gong"]..""
else
str1 = str1.." 马跟杠:"..data["ma_geng_gong"]..""
end
end
if geng_zhuan and geng_zhuan~=0 then
if geng_zhuan>0 then
str1 = str1.." 跟庄:+"..geng_zhuan..""
else
str1 = str1.." 跟庄:"..geng_zhuan..""
end
end
item:GetChild("score3").text=str1
local paixingCtr=item:GetController("detail")
table.insert(self.PaiXingXiangQingCtrList,paixingCtr)
-------------------------
local hp_nonnegative = room:checkHpNonnegative()
item:GetController("nonnegative").selectedIndex = hp_nonnegative and 1 or 0
if hp_nonnegative then
local hp_info = data.hp_info
local ctr_hp_limit = item:GetController("hp_limit")
local hp = d2ad(hp_info.round_actual_hp)
if hp >= 0 then hp = "+" .. tostring(hp) end
item:GetChild("tex_hp").text = hp
ctr_hp_limit.selectedIndex = hp_info.upper_limit and 1 or 0
end
item:GetController("win").selectedIndex = is_win and 0 or 1
if p.self_user.account_id == active_player and is_win == false and total < 0 then
item:GetController("win").selectedIndex = 2
end
if is_win then
item:GetController("bg").selectedIndex=1
else
item:GetController("bg").selectedIndex=0
end
local win_card = item:GetChild("win_card")
win_card.icon = "ui://Main_PokeMaJiang/201_"..data["win_card"]
if niao and #niao>0 then
local currentNiaoList=self:CalculateNiao(niao ,data["seat"])
if currentNiaoList and #currentNiaoList>0 then
local lst_niao = item:GetChild("list_niao")
lst_niao:RemoveChildrenToPool()
for i = 1, #currentNiaoList do
if currentNiaoList[i].score > 0 then
local card_niao = lst_niao:AddItemFromPool()
card_niao.icon = "ui://Main_PokeMaJiang/201_" .. currentNiaoList[i].card
end
end
end
end
if p.seat == room.banker_seat then
item:GetController("bank").selectedIndex = 1
end
end
function M:CalculateNiao(niaoList,seat)
local tempNiao={}
for i=1,#niaoList do
if niaoList[i].seat==seat then
table.insert(tempNiao,niaoList[i])
end
end
return tempNiao
end
function M:FillItemData2(room, data, list)
-- 赋值result_info聊天室分享需要
local player_list = {}
for i = 1, #data do
player_list[i] = {}
local user = room:GetPlayerBySeat(data[i].seat).self_user
player_list[i].id = user.account_id
player_list[i].hp_info = data[i].hp_info
player_list[i].score = data[i].total_score
player_list[i].house = room.owner_id == player_list[i].id and 1 or 0
player_list[i].nick = user.nick_name
player_list[i].head_url = user.head_url
local settle_log = data[i].settle_log
player_list[i].param = {}
player_list[i].param[1]={}
player_list[i].param[1].key = "自摸次数:"
player_list[i].param[1].value = tostring(data[i].settle_log.zimo)
player_list[i].param[2]={}
player_list[i].param[2].key = "接炮次数:"
player_list[i].param[2].value = tostring(data[i].settle_log.jie_pao)
player_list[i].param[3]={}
player_list[i].param[3].key = "点炮次数:"
player_list[i].param[3].value = tostring(data[i].settle_log.dian_pao)
player_list[i].param[4]={}
player_list[i].param[4].key = "暗杠次数:"
player_list[i].param[4].value = tostring(data[i].settle_log.an_kong)
player_list[i].param[5]={}
player_list[i].param[5].key = "明杠次数:"
player_list[i].param[5].value = tostring(data[i].settle_log.ming_kong)
end
local round = room.room_config.round
self:GenerateRoomResultInfo(round, room.room_config:GetGameName(), room.room_id, room.create_time, player_list)
local big_result = self._view:GetChild("big_result")
big_result:GetChild("txt_room_info").text = string.format("%s 房号%s 局%s/%s", os.date("%Y/%m/%d", os.time()), room.room_id, room.curren_round, room.room_config.round)
local lst_p = big_result:GetChild("player_list")
if #player_list == 3 then
lst_p.columnGap = 108
elseif #player_list == 2 then
lst_p.columnGap = 208
end
self:InitBigResult(room, 30)
local show_detail = room.hpOnOff == 1
for i = 1, lst_p.numChildren do
local com_p = lst_p:GetChildAt(i - 1)
com_p:GetController("jsicon").selectedIndex=i-1
local list_param = com_p:GetChild("list_param")
for j = 1, list_param.numChildren do
local tem = list_param:GetChildAt(j - 1)
tem:GetChild("txt_value").textFormat.size = 30
end
if show_detail then
local score = 0
if com_p:GetController("pn").selectedIndex == 0 then
score = com_p:GetChild("txt_navigate").text
else
score = com_p:GetChild("txt_positive").text
end
score = score / room.score_times
com_p:GetChild("tex_detail_score").text = string.format("%s × %s倍", score, room.score_times)
end
end
if room.group_id ~= 0 then
big_result:GetController("group").selectedIndex = 1
end
DataManager.CurrenRoom = nil
end
function M:LoadHead(p, room)
local btn_head = self._view:GetChild("btn_head")
for i = 1, #room.player_list do
local player = room.player_list[i]
if p.seat == player.seat and player.self_user.head_url ~= "" then
ImageLoad.Load(player.self_user.head_url, btn_head.icon)
end
end
end
local prefix
function M:GetPrefix()
-- if not prefix then
prefix = get_majiang_prefix(10)
-- end
return prefix
end
function M:DestroyWithCallback()
if self._callback then
self._callback()
end
self:Destroy()
end
return M