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_Majiang/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_Majiang/' ..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) 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.HandCardSort) 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_Majiang/202_"..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_Majiang/clearing_fz_3") for j=1,3 do local card = item:GetChild("card_" .. j) card.icon = "ui://Main_Majiang/202_"..fz_card[i].card 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_Majiang/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_Majiang/202_00" else card.icon = "ui://Main_Majiang/202_"..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_Majiang/202_"..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_Majiang/202_" .. 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 function M:DestroyWithCallback() if self._callback then self._callback() end self:Destroy() end return M