From c8c4adce646897a7655a6b84916bb0131a8c5ff9 Mon Sep 17 00:00:00 2001 From: 1076390229 <1076390229@qq.com> Date: Mon, 4 Aug 2025 19:52:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=BC=80=E6=9F=A5=E7=9C=8B=E6=88=90?= =?UTF-8?q?=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Game/View/Family/FamilyAllNumbers.lua | 39 +- .../Game/View/Family/FamilyMyFamily.lua | 17 +- .../base_project/Game/View/FamilyView.lua | 8 +- .../main/majiang/MJClearingView.lua | 381 ++++++++++++++++++ wb_new_ui/assets/Family/Main.xml | 36 +- .../Family/NumberList/com_numberList.xml | 53 +++ wb_new_ui/assets/Family/package.xml | 1 + .../Main_Majiang/images/img_card_arrow.png | Bin 0 -> 1999 bytes .../ART/base/Family/ui/Family_fui.bytes | Bin 120517 -> 121296 bytes 9 files changed, 473 insertions(+), 62 deletions(-) create mode 100644 lua_probject/main_project/main/majiang/MJClearingView.lua create mode 100644 wb_new_ui/assets/Family/NumberList/com_numberList.xml create mode 100644 wb_new_ui/assets/Main_Majiang/images/img_card_arrow.png diff --git a/lua_probject/base_project/Game/View/Family/FamilyAllNumbers.lua b/lua_probject/base_project/Game/View/Family/FamilyAllNumbers.lua index 31981277..f5100dcf 100644 --- a/lua_probject/base_project/Game/View/Family/FamilyAllNumbers.lua +++ b/lua_probject/base_project/Game/View/Family/FamilyAllNumbers.lua @@ -4,19 +4,18 @@ local FamilyInviteFamilyView = {} local M = FamilyInviteFamilyView -function FamilyInviteFamilyView.new(group, root) - setmetatable(M, { __index = root }) +function FamilyInviteFamilyView.new() + setmetatable(M, { __index = BaseView }) local self = setmetatable({}, { __index = M }) + self.class = "com_numberList" + BaseView.InitView(self ,"ui://Family/com_numberList") + self:initBtn() + return self +end + +function M:Reflash(group) self._group = group local numbers = self._group.members - print("lingmengFamilyInviteFamilyView", self._group.lev) - pt(self._group) - - self._viewList_allNumbers = self._view:GetChild('list_number') - self._btn_numberSearch = self._view:GetChild('btn_search') - self._input_numberSearch = self._view:GetChild('input_search') - - self:initBtn() local fgCtr = ControllerManager.GetController(NewGroupController) if #numbers == 0 then fgCtr:FG_GroupMembers(self._group.id, 0, self._group.total_member_num, false, 1, function(res) @@ -33,10 +32,20 @@ function FamilyInviteFamilyView.new(group, root) else self:FillList(numbers) end - return self +end + +function M:Show(group) + self:Reflash(group) + + BaseView.Show(self) end function M:initBtn() + self._viewList_allNumbers = self._view:GetChild('list_number') + self._btn_numberSearch = self._view:GetChild('btn_search') + self._input_numberSearch = self._view:GetChild('input_search') + self._btn_close = self._view:GetChild("btn_close") + self._btn_numberSearch.onClick:Set(function() local tempNumberList = {} for i = 1, self._group.member_num do @@ -50,13 +59,15 @@ function M:initBtn() self:FillList(tempNumberList) end end) + + self._btn_close.onClick:Set(function() + self:Close() + end) end function M:FillList(numbers) local fgCtr = ControllerManager.GetController(NewGroupController) self._viewList_allNumbers:SetVirtual() - self.familyType.selectedIndex = 4 - self.lastType = 1 self._viewList_allNumbers.itemRenderer = function(index, obj) local i = index + 1 obj:GetController('lev').selectedIndex = numbers[i].lev - 1 @@ -83,7 +94,7 @@ function M:FillList(numbers) end) end) end - + if self._viewList_allNumbers.numItems == #numbers then self._viewList_allNumbers:RefreshVirtualList() else diff --git a/lua_probject/base_project/Game/View/Family/FamilyMyFamily.lua b/lua_probject/base_project/Game/View/Family/FamilyMyFamily.lua index 776f1dfc..e98659ee 100644 --- a/lua_probject/base_project/Game/View/Family/FamilyMyFamily.lua +++ b/lua_probject/base_project/Game/View/Family/FamilyMyFamily.lua @@ -3,6 +3,7 @@ local FamilyRoomCardRecord = import(".FamilyRoomCardRecord") local RoomCardRecord = import(".RoomCardRecord") local FamilyInviteFamilyView = import('.FamilyInviteFamilyView') local FamilyAuditNumber = import(".FamilyAuditNumber") +local FamilyAllNumbers = import(".FamilyAllNumbers") --region LOCAL @@ -138,6 +139,7 @@ function FamilyMyFamily:Close() end function FamilyMyFamily:Refalsh() + self.family = DataManager.groups.groupMap[self.groupId] self.tex_fName.text = Utils.TextOmit(self.family.name, 6) @@ -245,20 +247,13 @@ function FamilyMyFamily:Init() end) self.btn_checkNumber.onClick:Set(function() - local curView = ViewManager.GetCurrenView() - if curView.class == "FamilyMainView" then - curView:OpenAllNumber(self.family) - BaseView.DestroyAll() - else - local view = ViewManager.ChangeView(ViewManager.View_Family, function() - view:OpenAllNumber(self.family) - end) - end + local group = DataManager.groups.groupMap[self.groupId] + local view = FamilyAllNumbers.new() + view:Show(group) end) self.btn_applyMsg.onClick:Set(function() local group = DataManager.groups.groupMap[self.groupId] - local view = FamilyAuditNumber.new() view:Show(group) end) @@ -392,6 +387,8 @@ function FamilyMyFamily:Init() self.cTips.selectedIndex = 0 end) + self.cStyle.selectedIndex = 2 + return self end diff --git a/lua_probject/base_project/Game/View/FamilyView.lua b/lua_probject/base_project/Game/View/FamilyView.lua index 8a0d9ada..1ca0c742 100644 --- a/lua_probject/base_project/Game/View/FamilyView.lua +++ b/lua_probject/base_project/Game/View/FamilyView.lua @@ -369,8 +369,8 @@ function M:OpenMyFamily(groupId) end function M:AllNumber() - self.lastType = 1 - self._child_familyAllNumbers = FamilyAllNumbers.new(self._group, self) + local view = FamilyAllNumbers.new() + view:Show(self._group) end function M:AuditNumber() @@ -412,8 +412,8 @@ function M:ShowAllRank() end function M:OpenAllNumber(group) - self.lastType = 1 - self._child_familyAllNumbers = FamilyAllNumbers.new(group, self) + local view = FamilyAllNumbers.new() + view:Show(group) end function M:MoreBtn() diff --git a/lua_probject/main_project/main/majiang/MJClearingView.lua b/lua_probject/main_project/main/majiang/MJClearingView.lua new file mode 100644 index 00000000..bd975e3c --- /dev/null +++ b/lua_probject/main_project/main/majiang/MJClearingView.lua @@ -0,0 +1,381 @@ +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._root_view:GetChild("win_mode").visible = false + + 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:InitData(over, room, result, total_result, callback, isWitness, witnessCallbak) + -- print("===============================InitData===========================", over, room, result, total_result) + -- pt(room) + -- pt(result) + -- Pt(total_result) + self._callback = callback + self._witnessCallbak = witnessCallbak + local showClearMainBtn = self._view:GetChild("btn_showClearMain") + local nextRoundBtn = self._view:GetChild("btn_nextRound") + local nextRoundBtn2 = self._view:GetChild("Btn_NextRound2") + local endRound = self._view:GetChild("Btn_EndRound") + local _overCtr = self._view:GetController("over") + local mainCtr = self._view:GetController("main") + local playerNum = self._view:GetController("playerNum") + local showBtnTypeCtr = self._view:GetController("showType") + + if result then + result.cardList = json.decode(result.cardList) + --排序 + --table.sort(result.cardList) + end + self.list_lastCard = self._view:GetChild('list_lastCard') + + self.list_lastCard:SetVirtual() + self.list_lastCard.itemRenderer = function(index, obj) + self:RemindCardRender(result.cardList[index + 1], obj) + end + + local peopleNum = room.room_config.people_num + + playerNum.selectedIndex = peopleNum - 2 + + showClearMainBtn.onClick:Set(function() + mainCtr.selectedIndex = 1 + end) + + nextRoundBtn.onClick:Set(function() + if isWitness and isWitness == 1 then + if self._witnessCallbak then + self._witnessCallbak() + end + self:DestroyWithCallback() + else + local _gamectr = ControllerManager.GetController(GameController) + _gamectr:PlayerReady() + self:DestroyWithCallback() + end + end) + + + + endRound.onClick:Set(function() + ViewManager.ChangeView(ViewManager.View_Family) + end) + + if over == 0 then + showBtnTypeCtr.selectedIndex = 0 + _overCtr.selectedIndex = 0 + self:fillResult0(room, peopleNum, result) + nextRoundBtn2.onClick:Set(function() + if isWitness and isWitness == 1 then + if self._witnessCallbak then + self._witnessCallbak() + end + --self:DestroyWithCallback() + else + local _gamectr = ControllerManager.GetController(GameController) + _gamectr:PlayerReady() + --self:DestroyWithCallback() + end + self:DestroyWithCallback() + end) + elseif over == 1 then + showBtnTypeCtr.selectedIndex = 1 + self:fillResult1(room, peopleNum, total_result) + if result then + self:fillResult0(room, peopleNum, result) + nextRoundBtn2.onClick:Set(function() + _overCtr.selectedIndex = 1 + end) + else + _overCtr.selectedIndex = 1 + end + else --解散房间如果没有开局直接退出不显示结算界面,over=2 + if room.curren_round > 0 then + _overCtr.selectedIndex = 1 + showBtnTypeCtr.selectedIndex = 1 + self:fillResult1(room, peopleNum, total_result) + else + ViewManager.ChangeView(ViewManager.View_Family) + end + end +end + +function M:fillResult0(room, peopleNum, result) + local config = ExtendManager.GetExtendConfig(room.game_id) + local mode = config:GetGameInfo() + local gamePlay = mode:LoadConfigToDetail(json.encode(room.room_config.config)) + self._view:GetChild("Label_GamePlay").title = string.format("第%s/%s局,%s", room.curren_round, + room.room_config.round, gamePlay) + self.list_lastCard.numItems = #result.cardList + self._view:GetChild('n147').text = string.format("剩余%d张未显示", #result.cardList) + for i = 1, peopleNum do + local playerInfoComp = self._view:GetChild(string.format("Comp_Player%d", i)) + + local allCardsList = playerInfoComp:GetChild("list_allCards") + local huCardBtn = playerInfoComp:GetChild("Btn_Card_Hu") + local jiangMaList = playerInfoComp:GetChild("list_JiangMa") + local ziMoCtr = playerInfoComp:GetController("isZiMo") + local dianPaoCtr = playerInfoComp:GetController("isPao") + local isMeCtr = playerInfoComp:GetController("IsMe") + local isZhuang = playerInfoComp:GetController("zhuang") + + local infoList = result.info_list[i] + local infoJiangma = result.niao + local playInfo = room:GetPlayerBySeat(infoList.seat) + local fzCardInfo = playInfo.fz_list + local fzInfoNum = #fzCardInfo + local handInfoNum = #infoList.hand_card + + self:fillHead(playInfo.self_user.head_url, playerInfoComp) + + infoList.jing_score = infoList.jing_score or 0 + infoList.gang_score = infoList.gang_score or 0 + infoList.hu_score = infoList.hu_score or 0 + infoList.round_score = infoList.round_score or 0 + + playerInfoComp:GetChild("text_name").text = playInfo.self_user.nick_name + playerInfoComp:GetChild("Text_BoJing").text = infoList.jing_score >= 0 and + string.format("+%d", infoList.jing_score) or infoList.jing_score + playerInfoComp:GetChild("Text_Gang").text = infoList.gang_score >= 0 and + string.format("+%d", infoList.gang_score) or infoList.gang_score + playerInfoComp:GetChild("Text_Hu").text = infoList.hu_score >= 0 and string.format("+%d", infoList.hu_score) or + infoList.hu_score + playerInfoComp:GetChild("Text_Tatal").text = infoList.round_score >= 0 and + string.format("+%d", infoList.round_score) or infoList.round_score + + for j = 1, fzInfoNum do + if fzCardInfo[j].type == FZType.Peng then + local item = allCardsList:AddItemFromPool("ui://Main_Majiang/Comp_Clearing_FZ_3") + for l = 1, 3 do + local card = item:GetChild(string.format("Btn_Card%d", l)) + card.icon = string.format("ui://Main_Majiang/%s202_%d", self:GetPrefix(), fzCardInfo[j].card) + print("===============================FZType.Peng", room.jing, fzCardInfo[j].card) + if room.jing == fzCardInfo[j].card then + card:GetController('jing').selectedIndex = 1 + end + end + elseif fzCardInfo[j].type == FZType.Chi then + local item = allCardsList:AddItemFromPool("ui://Main_Majiang/Comp_Clearing_FZ_3") + for l = 1, 3 do + local card = item:GetChild(string.format("Btn_Card%d", l)) + card.icon = string.format("ui://Main_Majiang/%s202_%d", self:GetPrefix(), fzCardInfo[j].opcard + [l]) + print("===============================FZType.Chi", room.jing, fzCardInfo[j].opcard[l]) + + if room.jing == fzCardInfo[j].opcard[l] then + card:GetController('jing').selectedIndex = 1 + end + end + elseif fzCardInfo[j].type == FZType.Gang or fzCardInfo[j].type == FZType.Gang_An or fzCardInfo[j].type == FZType.Gang_Peng then + local item = allCardsList:AddItemFromPool("ui://Main_Majiang/Comp_Clearing_FZ_4") + for l = 1, 4 do + local card = item:GetChild(string.format("Btn_Card%d", l)) + if fzCardInfo[j].type == FZType.Gang_An and j == 4 then + card.icon = "ui://Main_Majiang/b202_00" + else + card.icon = string.format("ui://Main_Majiang/%s202_%d", self:GetPrefix(), fzCardInfo[j].card) + print("===============================FZType.Gang", room.jing, fzCardInfo[j].card) + + if room.jing == fzCardInfo[j].card then + card:GetController('jing').selectedIndex = 1 + end + end + end + end + end + + local handCardItem = allCardsList:AddItemFromPool("ui://Main_Majiang/Comp_HandCard") + local handCardList = handCardItem:GetChild("list") + --手牌排序 + table.sort(infoList.hand_card, self.HandCardSortAndJing) + handCardList:SetVirtual() + handCardList.itemRenderer = function(index, obj) + obj.icon = string.format("ui://Main_Majiang/%s202_%d", self:GetPrefix(), infoList.hand_card[index + 1]) + if room.jing == infoList.hand_card[index + 1] then + obj:GetController('jing').selectedIndex = 1 + end + end + handCardList.numItems = handInfoNum + allCardsList.width = 234 * fzInfoNum + 78 + (handInfoNum - 1) * 74 + 36 * (fzInfoNum) + + if infoList.seat == room.self_player.seat then + isMeCtr.selectedIndex = 1 + end + + if infoList.seat == room.banker_seat then + isZhuang.selectedIndex = 1 + end + + if infoList.is_win then + local winInfo = "" + for j = 1, #infoList.win_list do + local Hu_Type_Name = + winInfo = string.format("%s,%s", winInfo, Hu_Type_Name[infoList.win_list[j].type]) + end + winInfo = string.sub(winInfo, 2, -1) + playerInfoComp:GetChild("text_huShow").text = winInfo + + if room.isZiMoHu then + ziMoCtr.selectedIndex = 1 + end + + + huCardBtn.icon = string.format("ui://Main_Majiang/b202_%d", infoList.win_card) + if room.jing == infoList.win_card then + huCardBtn:GetController('jing').selectedIndex = 1 + end + huCardBtn.visible = true + + jiangMaList.visible = true + jiangMaList:SetVirtual() + jiangMaList.itemRenderer = function(index, obj) + obj.icon = string.format("ui://Main_Majiang/b202_%d", infoJiangma[index + 1].card) + obj:GetController('bg').selectedIndex = infoJiangma[index + 1].score + obj:GetController('jing').selectedIndex = infoJiangma[index + 1].card == room.jing and 1 or 0 + end + jiangMaList.numItems = #infoJiangma + jiangMaList.columnCount = #infoJiangma / 2 + else + playerInfoComp:GetChild("text_huShow").text = "" + if not room.isZiMoHu and playInfo.self_user.account_id == result.active_player then + dianPaoCtr.selectedIndex = 1 + end + + huCardBtn.visible = false + jiangMaList.visible = false + end + end +end + +function M:fillResult1(room, peopleNum, total_result) + local gameNameAndRoomIDText = self._view:GetChild("Text_GameNameAndRoomID") + local familyIDText = self._view:GetChild("Text_FamilyID") + print("lingmeng fillResult1") + pt(room) + for i, v in pairs(DataManager.SelfUser.games) do + if v.game_id == room.game_id then + gameNameAndRoomIDText.text = string.format("%s 房号:%s", v.name, room.room_id) + end + end + if #gameNameAndRoomIDText.text <= 0 then + gameNameAndRoomIDText.text = string.format("房号:%s", room.room_id) + end + if room.group_id ~= 0 then + familyIDText.text = string.format("俱乐部:%s", room.group_id) + else + familyIDText.visible = false + end + self._view:GetChild("Text_RoundNum").text = string.format("局数:%s/%s", room.curren_round, room.room_config.round) + self._view:GetChild("Text_Time").text = os.date("%Y-%m-%d %H:%M:%S", os.time()) + + for i = 1, peopleNum do + local resultInfoComp = self._view:GetChild(string.format("Comp_ResultInfo%d", i)) + local totalInfoList = total_result.info_list[i] + local playInfo = room:GetPlayerBySeat(totalInfoList.seat) + + self:fillHead(playInfo.self_user.head_url, resultInfoComp) + + resultInfoComp:GetChild('Text_Name').text = playInfo.self_user.nick_name + resultInfoComp:GetChild('Text_ID').text = string.format("ID:%s", playInfo.self_user.account_id) + resultInfoComp:GetChild('Text_TotalScore').text = totalInfoList.total_score >= 0 and + string.format("+%s", totalInfoList.total_score) or totalInfoList.total_score + resultInfoComp:GetChild('Text_ZiMo').text = string.format("自摸 %d次", totalInfoList.settle_log.zimo or 0) + resultInfoComp:GetChild('Text_JiePao').text = string.format("接炮 %d次", totalInfoList.settle_log.jiepao or 0) + resultInfoComp:GetChild('Text_FangPao').text = string.format("放炮 %d次", totalInfoList.settle_log.fangpao or 0) + resultInfoComp:GetChild('Text_AnGang').text = string.format("暗杠 %d次", totalInfoList.settle_log.an_kong or 0) + resultInfoComp:GetChild('Text_MingGang').text = string.format("明杠 %d次", + totalInfoList.settle_log.ming_kong or 0) + resultInfoComp:GetChild('Text_FangGang').text = string.format("放杠 %d次", + totalInfoList.settle_log.fanggang or 0) + + resultInfoComp:GetController("win").selectedIndex = totalInfoList.total_score >= 0 and 1 or 0 + end +end + +function M:fillHead(url, view) + ImageLoad.Load(url, view:GetChild("Btn_Head")._iconObject) +end + +function M:RemindCardRender(data, obj) + print("小计算 刷新 card = ", data) + local room = DataManager.CurrenRoom + obj.icon = string.format("ui://Main_Majiang/b202_%d", data) + print("lingmeng icon", obj.icon) + if room.jing == data then + obj:GetController('jing').selectedIndex = 1 + end +end + +function M.HandCardSortAndJing(a, b) + local jing = DataManager.CurrenRoom.jing + if a == jing or b == jing then + if a == b then + return a < b + end + return a == jing + else + if a < 200 then + a = a + 1000 + elseif a < 300 then + a = a + 3000 + elseif a < 400 then + a = a + 2000 + else + a = a + 4000 + end + if b < 200 then + b = b + 1000 + elseif b < 300 then + b = b + 3000 + elseif b < 400 then + b = b + 2000 + else + b = b + 4000 + end + return a < b + 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 diff --git a/wb_new_ui/assets/Family/Main.xml b/wb_new_ui/assets/Family/Main.xml index 5aac9f18..3571cd5f 100644 --- a/wb_new_ui/assets/Family/Main.xml +++ b/wb_new_ui/assets/Family/Main.xml @@ -1,6 +1,6 @@ - + @@ -22,7 +22,7 @@ - + @@ -140,38 +140,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wb_new_ui/assets/Family/NumberList/com_numberList.xml b/wb_new_ui/assets/Family/NumberList/com_numberList.xml new file mode 100644 index 00000000..0ac22ddf --- /dev/null +++ b/wb_new_ui/assets/Family/NumberList/com_numberList.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wb_new_ui/assets/Family/package.xml b/wb_new_ui/assets/Family/package.xml index 53a1e115..0139089d 100644 --- a/wb_new_ui/assets/Family/package.xml +++ b/wb_new_ui/assets/Family/package.xml @@ -393,6 +393,7 @@ + \ No newline at end of file diff --git a/wb_new_ui/assets/Main_Majiang/images/img_card_arrow.png b/wb_new_ui/assets/Main_Majiang/images/img_card_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..d91818db4357b49cce2c5e578a0cce91f67441bd GIT binary patch literal 1999 zcmV;=2Qc`FP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2V_Y^K~z{rwU`Z5 z*5w(-FTMm{k}ttT5HK;n$W#yor_&T9Mf@z?JW`XkJbf&W$MiJaavjskZ3bGNYAvg^ zp~b9e&gl}NP;84dS5|1!RHi0jOsA&f-gUkCM>vRp@ZRVA^!UEdbKlqhe(w8z{;z1I zc@b~oL;Oew;!grd$IE}~-}+qNYn|3>pJ^V*H7F`thkccW zIP*;@OziqSJ}LYi%5opUE7@6ipjRvgai0V_!dfj#i?vZt=gOIc`2{QS&gq@7*0Oaq z_AI#vzm5#Y&Ge;=wMdY@bTZ(&I|K8!K7~Esyv-*jXSc!Zz>Q|d2b!H5XLf0_owGT1 z#_n}vwNv?7mRVJb*%z@^``&l^L`6QTSI)%?^m_x*13Jgn$Q%(J0{qbBw-2JA=8rI8 zJN(T~4!28|ZRahgRagxLmqoh$h~nk=s82M8GLGuX$xfX)BK$*Ki2Liqc)#X3*oAcz zQISjmv)hcFzTIq-%jCCuEiUzo!U)E55s7hIod^<=pN;J`D=6S4KeMm7`QnWBs|TtXp7M|z$& zqfGIh9gZy$qT0|IMJ^tIbw}=`h*v_)%7=KKvIJAS(o7te5FJY=5|^8d?T4pQ$c8Yp z{Ry6DZ$DGK@+r6|A-*Jp+`MccHXocsA-REOAN2A(JG-0W6{q8*BP5jc&Wgs9pH1Wx zoJ%pgV?EE4p{97RrQ(1i#GMhB53+WQLG{O(6!LPoS#gx-D2%crcfb^DULO=lh-xH= z+(f?r#H}dZcRTFR1d7=jVOG+`BmCz_E>oO!!*GysGl{!vG()1ukWPNMdqXOYm5qZ{ zj-Z$=%*<|XZZF>JV(0D;wzAt`iZMG5`HVZ7)XkA_(vM`!jmPHq(_sIgkn$lE^OB3L z#v8Y-Yz?t9(cn)1^1UPG3Lmnr^w~yVJG+V(8y}$l{(ok%UFkP(Fv=NcDp59~iQ6QkepXU@ z1Y+Ti(Xc{tkk$PKCt!Q9D;*}kGh(owamJ9|B#hLVla(&y7BXR30`_kk3ERh^Q}M&L z^BIN6-*btmq<^P2)FgqV&YY|`tvn*NGoIeUjqfm(U(RkjB^faJn{yNXLjP$*wV`aN zSsIvg0d^$=$t2E|@=e_Q$qd*Lp7-@~h(hE?1pDD0`qryrccN@40S!!9(F>9$Z7(u< zN;KAQ9L@q`(H`Zy!}U_iB9)&9<55Dt8AMH?k)doTZX>Hd;F1EoG3%K`oO+#34&}g( z-Pd})ychPT@4@6F+J%SdcQ}b7YK}(Pa7^mlFG@sbnD*nID9TUe8S~1noY#8xut>Fk zeqVe@e;Vflh?+vpan)=%CYAc_5krQ>24c}`DX*ilWs)K&}=pwliK>Nd|P@X)~}`Gw>W7}J=Hv~v*opZ z)Qxym`-y&p>us>b*>J2uEBmvRe|alTt)cV7OnntEwWc`m2u$l1_Q$`tSC?DTWk0RT zhGSA)zm?Nx#-S*W0k&l`U|!Q~D?|OM*{N;Vu9Oo@DZEVoW{X?*7*&uwonpvs%4THaUg?+!Eh@r3*gHhW(5R17! zmGrp0zsYglQmfy}1H8SEIWY#?9~*=Vd7QRI55WHZGuWHFVOKB{%Mr);@8f>w zP&QgL&Rb$~pqA5E)*DtAt400Ea-V1yxp&Xnxgu@4`t)J zi}Y&d)Qe_8G><4L)E`sB128$b1JZ*0kQV5RalYP2=Jy(2D$sU0lB=1V>gn`o?OA( hwGOVw+W7Rq{{dkXENhIa&yxTE002ovPDHLkV1iiL>dF8B literal 0 HcmV?d00001 diff --git a/wb_unity_pro/Assets/ART/base/Family/ui/Family_fui.bytes b/wb_unity_pro/Assets/ART/base/Family/ui/Family_fui.bytes index d8da9fca3aec731051570c12dad4e1752b73721a..3bf415899c886b1d5c35d3670b8ea4134de8074d 100644 GIT binary patch delta 6780 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