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

553 lines
17 KiB
Lua
Raw Normal View History

2025-04-01 10:48:36 +08:00
require("Game.View.ResultView")
local CS_Win_Type = import(".CS_Win_Type")
local CS_ClearingView = {}
local M = CS_ClearingView
function CS_ClearingView.new(blur_view)
2025-04-11 12:49:08 +08:00
setmetatable(M, { __index = ResultView })
local self = setmetatable({}, { __index = M })
2025-04-01 10:48:36 +08:00
self._full = true
ResultView.init(self, "ui://Main_Majiang/clearing")
self._currenIndex = 0
self._blur_view = blur_view
self._close_zone = false
self._close_destroy = true
2025-04-11 12:49:08 +08:00
self.xiPaiCtr = self._view:GetController("xipai")
2025-04-01 10:48:36 +08:00
self:InitMaPai()
return self
end
function M:InitMaPai()
2025-04-11 12:49:08 +08:00
self.maPaiCtr = self._view:GetController("mapai")
self.maPaiCtr.selectedIndex = 0
2025-04-01 10:48:36 +08:00
2025-04-11 12:49:08 +08:00
self.maPaiList = {}
2025-04-01 10:48:36 +08:00
2025-04-11 12:49:08 +08:00
for i = 1, 10 do
local tempMP = self._view:GetChild("niao" .. i)
table.insert(self.maPaiList, tempMP)
2025-04-01 10:48:36 +08:00
end
end
2025-04-11 12:49:08 +08:00
function M:IsMapaiShow(niao, isShow)
if niao then
niao.visible = isShow
end
end
2025-04-01 10:48:36 +08:00
2025-04-11 12:49:08 +08:00
function M:SetMaPaiValue(niao, value)
2025-04-01 10:48:36 +08:00
if niao then
2025-04-11 12:49:08 +08:00
niao.icon = 'ui://Main_Majiang/' .. get_majiang_prefix(DataManager.CurrenRoom.game_id) .. "201_" .. value
2025-04-01 10:48:36 +08:00
end
end
2025-04-11 12:49:08 +08:00
function M:SetMaPaiColor(niao, num)
niao:GetController("color").selectedIndex = num
2025-04-01 10:48:36 +08:00
end
function M:HideAllMapai()
2025-04-11 12:49:08 +08:00
for i = 1, #self.maPaiList do
self:IsMapaiShow(self.maPaiList[i], false)
self:SetMaPaiColor(self.maPaiList[i], 0)
2025-04-01 10:48:36 +08:00
end
end
function M:ShowSelectMaPai(niaoList)
2025-04-11 12:49:08 +08:00
if niaoList and #niaoList > 0 then
self.maPaiCtr.selectedIndex = 1
2025-04-01 10:48:36 +08:00
self:HideAllMapai()
2025-04-11 12:49:08 +08:00
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)
2025-04-01 10:48:36 +08:00
end
end
else
2025-04-11 12:49:08 +08:00
self.maPaiCtr.selectedIndex = 0
2025-04-01 10:48:36 +08:00
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")
2025-04-11 12:49:08 +08:00
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()))
2025-04-01 10:48:36 +08:00
self._view:GetChild("tex_gameinfo").text = string.gsub(room.room_config:GetDes(), "\r", "")
-- self._view:GetChild("tex_roomnum").text = room.room_id
-- self._view:GetChild("tex_data").text = os.date("%Y-%m-%d %H:%M", os.time())
-- self._view:GetChild("tex_time").text = os.date("%H:%M", os.time())
2025-04-11 12:49:08 +08:00
local paixingxiangqing = self._view:GetChild("btn_detal")
paixingxiangqing.visible = false
local fanhuipaixing = self._view:GetChild("btn_fanhuipaixing")
fanhuipaixing.visible = false
local round = DataManager.CurrenRoom.room_config.config.times or 1
local xpconfig = DataManager.CurrenRoom.room_config.config.xi_pai
if xpconfig and round > 1 then
self.xiPaiCtr.selectedIndex = 1
2025-04-01 10:48:36 +08:00
else
2025-04-11 12:49:08 +08:00
self.xiPaiCtr.selectedIndex = 0
2025-04-01 10:48:36 +08:00
end
2025-04-11 12:49:08 +08:00
2025-04-01 10:48:36 +08:00
if result then
self:ShowSelectMaPai(result.niao)
end
2025-04-11 12:49:08 +08:00
2025-04-01 10:48:36 +08:00
if over ~= 2 then
2025-04-11 12:49:08 +08:00
local xipai = self._view:GetChild("btn_xipai")
xipai.touchable = true
2025-04-01 10:48:36 +08:00
xipai.onClick:Add(function()
2025-04-11 12:49:08 +08:00
local xiPaiCallBack = function()
xipai.touchable = false
self.xiPaiCtr.selectedIndex = 0
ViewUtil.ErrorTip(1000000, "申请洗牌成功")
end
local _gamectr = ControllerManager.GetController(GameController)
_gamectr:SendXiPaiAction(xiPaiCallBack)
end)
2025-04-01 10:48:36 +08:00
if result and result.xipai_score then
--xipai.text="洗牌 积分x"..result.xipai_score
end
2025-04-11 12:49:08 +08:00
2025-04-01 10:48:36 +08:00
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
2025-04-11 12:49:08 +08:00
self.xiPaiCtr.selectedIndex = 0
2025-04-01 10:48:36 +08:00
_btnCtr.selectedIndex = 1
_sdkCtr.selectedIndex = 1
btn_result.onClick:Add(function()
_overCtr.selectedIndex = 1
_btnCtr.selectedIndex = 0
_sdkCtr.selectedIndex = 0
2025-04-11 12:49:08 +08:00
self.maPaiCtr.selectedIndex = 0
2025-04-01 10:48:36 +08:00
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
2025-04-11 12:49:08 +08:00
self.xiPaiCtr.selectedIndex = 0
2025-04-01 10:48:36 +08:00
_overCtr.selectedIndex = 1
2025-04-11 12:49:08 +08:00
self.maPaiCtr.selectedIndex = 0
2025-04-01 10:48:36 +08:00
btn_close.onClick:Add(function()
ViewManager.ChangeView(ViewManager.View_Lobby)
end)
self:AddClearItem(room, nil, total_result.info_list, over)
end
end
2025-04-11 12:49:08 +08:00
function M:AddClearItem(room, data, total_data, over, niao, active_player)
2025-04-01 10:48:36 +08:00
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
-- 把鸟放到中的人列表中
for i = 1, #niao do
if niao[i].score > 0 then
local p = room:GetPlayerById(niao[i].playerId)
for j = 1, #data do
if data[j].seat == p.seat then
if not data[j].niao then
data[j].niao = {}
end
table.insert(data[j].niao, niao[i].card)
end
end
end
end
2025-04-11 12:49:08 +08:00
table.sort(data, function(a, b) return a.seat > b.seat end)
2025-04-01 10:48:36 +08:00
list_view1:RemoveChildrenToPool()
2025-04-11 12:49:08 +08:00
for i = 1, #data do
2025-04-01 10:48:36 +08:00
local item = list_view1:AddItemFromPool()
self:FillItemData(room, data[i], item, active_player, niao)
end
2025-04-11 12:49:08 +08:00
if #data == 3 then
2025-04-01 10:48:36 +08:00
list_view1.lineGap = 54
elseif #data == 2 then
list_view1.lineGap = 108
end
2025-04-11 12:49:08 +08:00
if 1 == over then
2025-04-01 10:48:36 +08:00
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)
local _gamectr = ControllerManager.GetController(GameController)
local p = room:GetPlayerBySeat(data["seat"])
item:GetChild("playerName").text = p.self_user.nick_name
2025-04-11 12:49:08 +08:00
if data.win_count > 3 then
2025-04-01 10:48:36 +08:00
item:GetController("mult_win").selectedIndex = 1
-- item:GetChild("tex_win_count").text = string.char(97 + data.win_count - 4) .. "连"
end
local huadd = data["hu_score"]
local qsadd = data["qs_score"]
local birdadd = data["niao_score"]
local qs_niao_list = data["qs_niao_list"]
local total = data["round_score"]
-- if room.room_config.fengding and huadd + birdadd >= 28 then
if data.fengding then
item:GetController("fengding").selectedIndex = 1
else
item:GetController("fengding").selectedIndex = 0
end
local sp = " "
2025-04-11 12:49:08 +08:00
local str = "胡:" .. huadd .. ""
str = str .. sp .. "扎鸟:" .. birdadd .. ""
str = str .. sp .. "起手胡:" .. qsadd .. ""
2025-04-01 10:48:36 +08:00
-- if #qs_niao_list > 0 then
-- str = str .. "(摇骰点数:" .. qs_niao_list[1].card .. " " .. qs_niao_list[2].card .. ""
-- end
if data["piao_niao_score"] then
2025-04-11 12:49:08 +08:00
str = str .. sp .. "飘鸟:" .. data["piao_niao_score"] .. ""
2025-04-01 10:48:36 +08:00
end
item:GetChild("score1").text = str
local win_list = data["win_list"]
local remove_win_card = true
if win_list then
local str1 = ""
item:GetController("hu_list").selectedIndex = 1
2025-04-11 12:49:08 +08:00
for i = 1, #win_list do
2025-04-01 10:48:36 +08:00
local str2 = ""
if win_list[i].type == 1 then
local value = win_list[i].value
str2 = value == 1 and "" or (value == 2 and "豪华" or (value == 3 and "双豪华" or "三豪华"))
str2 = str2 .. "小七对"
else
if win_list[i].type == 5 then
remove_win_card = false
end
str2 = CS_Win_Type[win_list[i].type]
end
2025-04-11 12:49:08 +08:00
str1 = str1 .. str2 .. sp
2025-04-01 10:48:36 +08:00
end
item:GetChild("score3").text = str1
end
-- 手牌
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()
if data["is_win"] and active_player == p.self_user.account_id and remove_win_card then
list_remove(hand_cards, data["win_card"])
end
2025-04-11 12:49:08 +08:00
for i = 1, #hand_cards do
2025-04-01 10:48:36 +08:00
local card = hand_list_view:AddItemFromPool()
2025-04-11 12:49:08 +08:00
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. hand_cards[i]
2025-04-01 10:48:36 +08:00
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()
2025-04-11 12:49:08 +08:00
for i = 1, #fz_card do
2025-04-01 10:48:36 +08:00
if fz_card[i].type == FZType.Peng then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_3")
2025-04-11 12:49:08 +08:00
for j = 1, 3 do
2025-04-01 10:48:36 +08:00
local card = item:GetChild("card_" .. j)
2025-04-11 12:49:08 +08:00
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. fz_card[i].card
2025-04-01 10:48:36 +08:00
end
elseif fz_card[i].type == FZType.Chi then
local item = fz_card_list:AddItemFromPool("ui://Main_Majiang/clearing_fz_3")
2025-04-11 12:49:08 +08:00
for j = 1, 3 do
2025-04-01 10:48:36 +08:00
local card = item:GetChild("card_" .. j)
2025-04-11 12:49:08 +08:00
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. fz_card[i].opcard[j]
2025-04-01 10:48:36 +08:00
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")
2025-04-11 12:49:08 +08:00
for j = 1, 4 do
2025-04-01 10:48:36 +08:00
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
2025-04-11 12:49:08 +08:00
card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. fz_card[i].card
2025-04-01 10:48:36 +08:00
end
end
end
end
-- local total_score = data["total_score"]
if total >= 0 then
2025-04-11 12:49:08 +08:00
item:GetChild("score2").text = "+" .. total
2025-04-01 10:48:36 +08:00
item:GetChild("score2").grayed = false
else
item:GetChild("score2").text = total
item:GetChild("score2").grayed = true
end
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
local is_win = data["is_win"] or false
item:GetController("win").selectedIndex = is_win and 0 or 1
2025-04-11 12:49:08 +08:00
---- print(p.self_user.account_id, active_player)
if p.self_user.account_id == active_player and is_win == false and not data["liuju"] then
item:GetController("win").selectedIndex = 2
2025-04-01 10:48:36 +08:00
end
local win_card = item:GetChild("win_card")
2025-04-11 12:49:08 +08:00
if is_win then
win_card.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. data["win_card"]
2025-04-01 10:48:36 +08:00
end
if data.niao then
item:GetController("niao").selectedIndex = 1
local lst_niao = item:GetChild("list_niao")
lst_niao:RemoveChildrenToPool()
local niao = data.niao
for i = 1, #niao do
local card_niao = lst_niao:AddItemFromPool()
2025-04-11 12:49:08 +08:00
card_niao.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. niao[i]
2025-04-01 10:48:36 +08:00
end
end
if p.seat == room.banker_seat then
item:GetController("bank").selectedIndex = 1
end
-- item.onClick:Set(function()
-- self:__AddQSInfo(data.qs_info_list, p.self_user.nick_name, room)
-- end)
end
function M:FillItemData2(room, data, list)
2025-04-11 12:49:08 +08:00
-- 赋值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
2025-04-01 10:48:36 +08:00
local settle_log = data[i].settle_log
2025-04-11 12:49:08 +08:00
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.da_zimo)
player_list[i].param[2] = {}
player_list[i].param[2].key = "小胡自摸:"
player_list[i].param[2].value = tostring(data[i].settle_log.xiao_zimo)
player_list[i].param[3] = {}
player_list[i].param[3].key = "大胡接炮:"
player_list[i].param[3].value = tostring(data[i].settle_log.da_jie_pao)
player_list[i].param[4] = {}
player_list[i].param[4].key = "小胡接炮:"
player_list[i].param[4].value = tostring(data[i].settle_log.xiao_jie_pao)
player_list[i].param[5] = {}
player_list[i].param[5].key = "大胡点炮:"
player_list[i].param[5].value = tostring(data[i].settle_log.da_dian_pao)
player_list[i].param[6] = {}
player_list[i].param[6].key = "小胡点炮:"
player_list[i].param[6].value = tostring(data[i].settle_log.xiao_dian_pao)
end
local round = room.room_config.round
self:GenerateRoomResultInfo(round, room.room_config:GetGameName(), room.room_id, room.create_time, player_list)
-- self:SetGSListlineGap(-10)
2025-04-01 10:48:36 +08:00
local big_result = self._view:GetChild("big_result")
2025-04-11 12:49:08 +08:00
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
2025-04-01 10:48:36 +08:00
lst_p.columnGap = 108
elseif #player_list == 2 then
lst_p.columnGap = 208
end
2025-04-11 12:49:08 +08:00
self:InitBigResult(room, 30)
2025-04-01 10:48:36 +08:00
local show_detail = room.hpOnOff == 1
2025-04-11 12:49:08 +08:00
for i = 1, lst_p.numChildren do
local com_p = lst_p:GetChildAt(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
2025-04-01 10:48:36 +08:00
end
-- 起手胡详情
function M:__AddQSInfo(data, nick, room)
if self._qsinfo_view then
self._qsinfo_view:Dispose()
end
local qsinfo = UIPackage.CreateObjectFromURL("ui://Extend_MJ_ChangSha/qs_info")
self._qsinfo_view = qsinfo
qsinfo:GetChild("btn_close").onClick:Add(function()
qsinfo:Dispose()
end)
qsinfo:GetChild("tex_nick").text = nick
local lst_qs = qsinfo:GetChild("lst_qs")
lst_qs:RemoveChildrenToPool()
if #data > 0 then
for i = 1, #data do
local tem = data[i]
local item = lst_qs:AddItemFromPool()
local lst_card = item:GetChild("lst_card")
-- 整理起手胡板牌
local card_map = {}
for j = 1, #tem.win_list do
local opcard = tem.win_list[j].opcard
local cards = {}
for k = 1, #opcard do
local card = opcard[k]
if cards[card] then
cards[card] = cards[card] + 1
else
cards[card] = 1
end
end
2025-04-11 12:49:08 +08:00
for k, v in pairs(cards) do
2025-04-01 10:48:36 +08:00
local card = k
if card_map[card] then
if card_map[card] < cards[card] then
card_map[card] = cards[card]
end
else
card_map[card] = cards[card]
end
end
end
local all_cards = {}
2025-04-11 12:49:08 +08:00
for j, v in pairs(card_map) do
2025-04-01 10:48:36 +08:00
for k = 1, v do
table.insert(all_cards, j)
end
end
table.sort(all_cards)
for j = 1, #all_cards do
local citem = lst_card:AddItemFromPool()
citem.touchable = false
2025-04-11 12:49:08 +08:00
citem.icon = "ui://Main_Majiang/" .. self:GetPrefix() .. "202_" .. all_cards[j]
2025-04-01 10:48:36 +08:00
end
local cs_zhua_niao = room.room_config.niao_type == 2
qsinfo:GetController("niao").selectedIndex = cs_zhua_niao and 1 or 0
2025-04-11 12:49:08 +08:00
item:GetChild("tex_touzi").text = cs_zhua_niao and (tem.niao[1].card .. " " .. tem.niao[2].card) or ""
2025-04-01 10:48:36 +08:00
item:GetChild("tex_score").text = tem.score
item:GetChild("tex_niao_score").text = cs_zhua_niao and tem.niao_score or ""
end
else
qsinfo:GetController("c1").selectedIndex = 1
end
if #data > 1 then
qsinfo.height = qsinfo.height + 56 * (#data - 1)
end
local _view_start_pos = nil
local _touch_start_pos = nil
self._view:AddChild(qsinfo)
local btn_di = qsinfo:GetChild("btn_di")
2025-04-11 12:49:08 +08:00
btn_di.onTouchBegin:Add(function(context)
2025-04-01 10:48:36 +08:00
_view_start_pos = Vector2(qsinfo.x, qsinfo.y)
_touch_start_pos = self._view:GlobalToLocal(Vector2(context.inputEvent.x, context.inputEvent.y))
end)
btn_di.onTouchMove:Add(function(context)
2025-04-11 12:49:08 +08:00
local xy = self._view:GlobalToLocal(Vector2.New(context.inputEvent.x, context.inputEvent.y))
2025-04-01 10:48:36 +08:00
local dist = Vector2(xy.x - _touch_start_pos.x, xy.y - _touch_start_pos.y)
local posx = _view_start_pos.x + dist.x
local posy = _view_start_pos.y + dist.y
local max_x = self._view.width - qsinfo.width
local max_y = self._view.height - qsinfo.height
qsinfo.x = posx < 0 and 0 or posx > max_x and max_x or posx
qsinfo.y = posy < 0 and 0 or posy > max_y and max_y or posy
end)
qsinfo:Center()
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
2025-04-11 12:49:08 +08:00
prefix = get_majiang_prefix(10)
-- end
2025-04-01 10:48:36 +08:00
return prefix
end
2025-04-11 12:49:08 +08:00
function M:DestroyWithCallback()
2025-04-01 10:48:36 +08:00
if self._callback then
self._callback()
end
self:Destroy()
end
2025-04-11 12:49:08 +08:00
return M