合并冲突,只有.bytes文件,发布后提交上传

master
罗家炜 2025-08-11 16:17:48 +08:00
commit 523997005f
27 changed files with 84 additions and 115 deletions

View File

@ -419,6 +419,7 @@ end
-- 聊天事件 -- 聊天事件
function M:OnEventInteraction(evt_data) function M:OnEventInteraction(evt_data)
--[[
if self._room.ban_chat1 == false or self._room.ban_chat2 == false then if self._room.ban_chat1 == false or self._room.ban_chat2 == false then
self._cacheEvent:Enqueue( self._cacheEvent:Enqueue(
function() function()
@ -427,9 +428,16 @@ function M:OnEventInteraction(evt_data)
local type1 = evt_data['type'] local type1 = evt_data['type']
local parm = evt_data['parm'] local parm = evt_data['parm']
DispatchEvent(self._dispatcher, GameEvent.Interaction, p, type1, parm) DispatchEvent(self._dispatcher, GameEvent.Interaction, p, type1, parm)
end end)
) end]]
end
self._cacheEvent:Enqueue(function()
local playerid = evt_data['playerid']
local p = self._room:GetPlayerById(playerid)
local type1 = evt_data['type']
local parm = evt_data['parm']
DispatchEvent(self._dispatcher, GameEvent.Interaction, p, type1, parm)
end)
end end
-- GPS更新事件 -- GPS更新事件

View File

@ -117,8 +117,10 @@ function M:CreateRoom(game_id, _data, callback)
end end
local join_room_frame = 0 local join_room_frame = 0
function M:PublicJoinRoom(cmd, roomid, tem, callback, group_id, pid) function M:PublicJoinRoom(cmd, roomid, tem, callback, group_id, pid)
printlog("公共进入房间接口=============PublicJoinRoom") printlog("公共进入房间接口=============PublicJoinRoom")
print("test,亲友圈ID是",group_id)
-- 同一帧不重复调用 -- 同一帧不重复调用
local last_frame = join_room_frame local last_frame = join_room_frame
join_room_frame = Time.frameCount join_room_frame = Time.frameCount
@ -127,6 +129,7 @@ function M:PublicJoinRoom(cmd, roomid, tem, callback, group_id, pid)
end end
-- 防止游戏没有离开控制器 -- 防止游戏没有离开控制器
ControllerManager.ChangeController(LoddyController) ControllerManager.ChangeController(LoddyController)
local _data = {} local _data = {}
if cmd == Protocol.WEB_FG_MATCH_ROOM then if cmd == Protocol.WEB_FG_MATCH_ROOM then
_data["is_null"] = tem _data["is_null"] = tem

View File

@ -65,9 +65,9 @@ function M:init(url)
else else
ctr_hide_bg.selectedIndex = 0 ctr_hide_bg.selectedIndex = 0
end end
printlog(url) --printlog(url)
self._view = UIPackage.CreateObjectFromURL(url) self._view = UIPackage.CreateObjectFromURL(url)
printlog(self._view) --printlog(self._view)
--self._view.fairyBatching = true --self._view.fairyBatching = true
local btn_close = self._view:GetChild("btn_close") local btn_close = self._view:GetChild("btn_close")
if (btn_close) then if (btn_close) then
@ -162,6 +162,8 @@ function M:Show()
local scaleY = GRoot.inst.height / self._contentPane.height local scaleY = GRoot.inst.height / self._contentPane.height
local scaleX = GRoot.inst.width / self._contentPane.width local scaleX = GRoot.inst.width / self._contentPane.width
self._contentPane:SetScale(scaleX, scaleY) self._contentPane:SetScale(scaleX, scaleY)
--self._contentPane.x = 0
--self._contentPane.y = 0
end end
if self._full then if self._full then

View File

@ -8,7 +8,10 @@ local M = FamilyEventView
function FamilyEventView.new(root) function FamilyEventView.new(root)
setmetatable(M, { __index = root }) setmetatable(M, { __index = root })
local self = setmetatable({}, { __index = M }) local self = setmetatable({}, { __index = M })
return self
end
function M:AddListener()
local mgr_ctr = self._mgr_ctr local mgr_ctr = self._mgr_ctr
mgr_ctr:AddEventListener(GroupMgrEvent.AddPlay, handler(self, self._evtAddPlay)) mgr_ctr:AddEventListener(GroupMgrEvent.AddPlay, handler(self, self._evtAddPlay))
mgr_ctr:AddEventListener(GroupMgrEvent.DelPlay, handler(self, self._evtDelPlay)) mgr_ctr:AddEventListener(GroupMgrEvent.DelPlay, handler(self, self._evtDelPlay))
@ -31,7 +34,6 @@ function FamilyEventView.new(root)
mgr_ctr:AddEventListener(GroupMgrEvent.OnFamilyRoomReflash, handler(self, self._evtOnFamilyRoomReflash)) mgr_ctr:AddEventListener(GroupMgrEvent.OnFamilyRoomReflash, handler(self, self._evtOnFamilyRoomReflash))
mgr_ctr:AddEventListener(GroupMgrEvent.OnFamilyMemberOut, handler(self, self._evtOnFamilyMemberOut)) mgr_ctr:AddEventListener(GroupMgrEvent.OnFamilyMemberOut, handler(self, self._evtOnFamilyMemberOut))
print("家族添加监听") print("家族添加监听")
return self
end end
function M:RemoveAll() function M:RemoveAll()

View File

@ -8,7 +8,7 @@ local function UpdateFamilyRoom(self)
return return
end end
view:UpdateFamilyRoom(self.groupId) view:UpdateFamilyRoom(nil, self.groupId)
end end
function PlayEditView.New() function PlayEditView.New()

View File

@ -1132,7 +1132,7 @@ function M:Show()
Broadcast.AddListener(BroadcastEvent.OnMemberChange, self.ReflashMember, self) Broadcast.AddListener(BroadcastEvent.OnMemberChange, self.ReflashMember, self)
Broadcast.AddListener(BroadcastEvent.OnOutFamily, self.Reflash, self) Broadcast.AddListener(BroadcastEvent.OnOutFamily, self.Reflash, self)
self.Reflash() self._familyEventView:AddListener()
BaseView.Show(self) BaseView.Show(self)
self:Reflash() self:Reflash()

View File

@ -75,6 +75,8 @@ function M:init()
UIPackage.AddPackage('base/chat/ui/Chat') UIPackage.AddPackage('base/chat/ui/Chat')
self.Fix_Msg_Chat = ViewUtil.Fix_Msg_Chat -- 自动回复消息列表 self.Fix_Msg_Chat = ViewUtil.Fix_Msg_Chat -- 自动回复消息列表
self.Fix_Msg_Chat2 = nil -- 自动回复列表2 self.Fix_Msg_Chat2 = nil -- 自动回复列表2
self._scale = true
self._full_offset = false
self.class = "MainView" self.class = "MainView"
self:InitView() self:InitView()
self:SetTuoGuanState() self:SetTuoGuanState()

View File

@ -13,7 +13,7 @@ function GroupGameSettingView.new(blur_view, gid, pid, room_config, callback)
local self = setmetatable({}, { __index = M }) local self = setmetatable({}, { __index = M })
self.class = "GroupGameSettingView" self.class = "GroupGameSettingView"
self._animation = false self._animation = false
self._full = true --self._full = true
self._full_offset = false self._full_offset = false
self.selectedIndex = index self.selectedIndex = index
self._close_destroy = true self._close_destroy = true
@ -34,7 +34,8 @@ function GroupGameSettingView.new(blur_view, gid, pid, room_config, callback)
self.rewards_data = {} self.rewards_data = {}
self.callback = callback self.callback = callback
self._full = true --self._full = true
self._scale = true
self:init("ui://NewGroup/View_GroupGameSetting") self:init("ui://NewGroup/View_GroupGameSetting")
return self return self
end end

View File

@ -214,6 +214,10 @@ function M:UpdateScore(score)
end end
end end
end end
local curScore = tonumber(self._tex_score.text)
curScore = curScore or 0
self:ScoreAnimation(score - curScore)
self._tex_score.text = tostring(score) self._tex_score.text = tostring(score)
end end

View File

@ -45,6 +45,7 @@ function M:init()
self._ctr_read = view:GetController('read') self._ctr_read = view:GetController('read')
self._ctr_offline = view:GetController('offline') self._ctr_offline = view:GetController('offline')
self._tex_score = view:GetChild('text_jifen')
self._btn_head = view:GetChild('btn_head') self._btn_head = view:GetChild('btn_head')
self._ctr_bank = view:GetController('bank') self._ctr_bank = view:GetController('bank')
@ -160,7 +161,7 @@ function M:FillData(player)
if (DataManager.CurrenRoom.self_player ~= player) then if (DataManager.CurrenRoom.self_player ~= player) then
self._ctr_offline.selectedIndex = player.line_state == 0 and 1 or 0 self._ctr_offline.selectedIndex = player.line_state == 0 and 1 or 0
end end
-- self:UpdateScore() self:UpdateScore()
self:Ready(player.ready) self:Ready(player.ready)
if player.entrust and player ~= room.self_player then if player.entrust and player ~= room.self_player then
@ -183,7 +184,7 @@ function M:UpdateScore(score)
-- end -- end
-- end -- end
end end
-- self._tex_score.text = tostring(score) self._tex_score.text = tostring(score)
end end
function M:SetStartType(peopleNum, seat) function M:SetStartType(peopleNum, seat)
@ -360,6 +361,11 @@ function M:Destroy()
end end
function M:ScoreAnimation(score) function M:ScoreAnimation(score)
if score == 0 then
return
end
local imgPath = "ui://Main_Majiang/score" local imgPath = "ui://Main_Majiang/score"
local symbol = "ui://Main_Majiang/score+" local symbol = "ui://Main_Majiang/score+"
if score < 0 then if score < 0 then

View File

@ -95,6 +95,8 @@ end
function M:init(url, isBigFull) function M:init(url, isBigFull)
self._animation = false self._animation = false
self._scale = true
self._full = false
BaseWindow.init(self, url) BaseWindow.init(self, url)
self:InitView() self:InitView()

View File

@ -53,25 +53,4 @@ function M:FillData(player)
PlayerInfoView2.FillData(self, player) PlayerInfoView2.FillData(self, player)
end end
function M:UpdateScore()
local score = self._player.total_score
local room = DataManager.CurrenRoom
if room:checkHpNonnegative() then
score = d2ad(self._player.cur_hp)
end
if not score then
score = 0
end
if score < 0 then
self._ct_score.selectedIndex = 1
self._tex_score2.text = score
else
self._ct_score.selectedIndex = 0
if not room:checkHpNonnegative() then
score = "+" .. score
end
self._tex_score.text = score
end
end
return M return M

View File

@ -53,25 +53,4 @@ function M:FillData(player)
PlayerInfoView2.FillData(self, player) PlayerInfoView2.FillData(self, player)
end end
function M:UpdateScore()
local score = self._player.total_score
local room = DataManager.CurrenRoom
if room:checkHpNonnegative() then
score = d2ad(self._player.cur_hp)
end
if not score then
score = 0
end
if score < 0 then
self._ct_score.selectedIndex = 1
self._tex_score2.text = score
else
self._ct_score.selectedIndex = 0
if not room:checkHpNonnegative() then
score = "+" .. score
end
self._tex_score.text = score
end
end
return M return M

View File

@ -53,25 +53,4 @@ function M:FillData(player)
PlayerInfoView2.FillData(self, player) PlayerInfoView2.FillData(self, player)
end end
function M:UpdateScore()
local score = self._player.total_score
local room = DataManager.CurrenRoom
if room:checkHpNonnegative() then
score = d2ad(self._player.cur_hp)
end
if not score then
score = 0
end
if score < 0 then
self._ct_score.selectedIndex = 1
self._tex_score2.text = score
else
self._ct_score.selectedIndex = 0
if not room:checkHpNonnegative() then
score = "+" .. score
end
self._tex_score.text = score
end
end
return M return M

View File

@ -53,25 +53,4 @@ function M:FillData(player)
PlayerInfoView2.FillData(self, player) PlayerInfoView2.FillData(self, player)
end end
function M:UpdateScore()
local score = self._player.total_score
local room = DataManager.CurrenRoom
if room:checkHpNonnegative() then
score = d2ad(self._player.cur_hp)
end
if not score then
score = 0
end
if score < 0 then
self._ct_score.selectedIndex = 1
self._tex_score2.text = score
else
self._ct_score.selectedIndex = 0
if not room:checkHpNonnegative() then
score = "+" .. score
end
self._tex_score.text = score
end
end
return M return M

View File

@ -37,6 +37,8 @@ function M:InitView(url, use_custom_bg, custom_bg_config)
self._room.card_type = DataManager.CardTypeList[tostring(self._room.game_id)] or 1 self._room.card_type = DataManager.CardTypeList[tostring(self._room.game_id)] or 1
UIPackage.AddPackage("base/main_majiang/ui/Main_Majiang") UIPackage.AddPackage("base/main_majiang/ui/Main_Majiang")
self._full = false
self._scale = true
MainView.InitView(self, url) MainView.InitView(self, url)
self.btn_setting = self._view:GetChild("btn_setting") self.btn_setting = self._view:GetChild("btn_setting")
local _view = self._view local _view = self._view

View File

@ -30,9 +30,9 @@
<group id="n33_e7qn" name="n33" xy="0,0" size="138,139" advanced="true"> <group id="n33_e7qn" name="n33" xy="0,0" size="138,139" advanced="true">
<relation target="" sidePair="width-width,height-height"/> <relation target="" sidePair="width-width,height-height"/>
</group> </group>
<image id="n8" name="ready" src="qmc11ao" fileName="images/gamexzmj_9 1.png" xy="38,152" size="55,65"> <image id="n8" name="ready" src="qmc11ao" fileName="images/gamexzmj_9 1.png" xy="35,171" size="55,65" scale="1.2,1.2">
<gearDisplay controller="read" pages="1"/> <gearDisplay controller="read" pages="1"/>
<relation target="" sidePair="top-bottom"/> <relation target="" sidePair="center-center,top-bottom"/>
</image> </image>
<text id="n48_pkx5" name="name" xy="-47,-46" size="226,49" font="ui://27vd145bh35o7ik0" fontSize="36" color="#ffffff" align="center" vAlign="middle" autoSize="shrink" bold="true" singleLine="true" text="萌萌砂带"> <text id="n48_pkx5" name="name" xy="-47,-46" size="226,49" font="ui://27vd145bh35o7ik0" fontSize="36" color="#ffffff" align="center" vAlign="middle" autoSize="shrink" bold="true" singleLine="true" text="萌萌砂带">
<gearXY controller="site" pages="2,0,1" values="-47,-46|-37,-57|150,0"/> <gearXY controller="site" pages="2,0,1" values="-47,-46|-37,-57|150,0"/>
@ -62,6 +62,7 @@
</text> </text>
<group id="n46_rfcn" name="zhanji" xy="-10,126" size="153,58" advanced="true"> <group id="n46_rfcn" name="zhanji" xy="-10,126" size="153,58" advanced="true">
<gearXY controller="site" pages="2,1" values="-10,126|154,97" default="29,136"/> <gearXY controller="site" pages="2,1" values="-10,126|154,97" default="29,136"/>
<relation target="" sidePair="top-top"/>
</group> </group>
<list id="n51_qmc1" name="list_scoreAnimation" xy="-92,131" size="200,51" scale="1.6,1.6" layout="row" selectionMode="none" defaultItem="ui://v0j9abjyuans1b1" autoItemSize="false" align="center" vAlign="middle" renderOrder="descent" autoClearItems="true"> <list id="n51_qmc1" name="list_scoreAnimation" xy="-92,131" size="200,51" scale="1.6,1.6" layout="row" selectionMode="none" defaultItem="ui://v0j9abjyuans1b1" autoItemSize="false" align="center" vAlign="middle" renderOrder="descent" autoClearItems="true">
<gearDisplay controller="cScore" pages="1"/> <gearDisplay controller="cScore" pages="1"/>

View File

@ -10,7 +10,9 @@
<controller name="witness" pages="0,,1," selected="0"/> <controller name="witness" pages="0,,1," selected="0"/>
<controller name="voice" pages="0,,1," selected="0"/> <controller name="voice" pages="0,,1," selected="0"/>
<displayList> <displayList>
<component id="n193_o4nh" name="com_logo" src="o4nh1ei" fileName="Main_new/Component/com_logo.xml" xy="1209,328" size="435,73"/> <component id="n193_o4nh" name="com_logo" src="o4nh1ei" fileName="Main_new/Component/com_logo.xml" xy="1209,328" size="435,73">
<relation target="" sidePair="center-center,middle-middle"/>
</component>
<component id="n81_l2u4" name="cardbox" src="gq7m5e" fileName="Main_style_2/turn/Gcm_box_4.xml" xy="1281,-296" pivot="0.5,0.5"> <component id="n81_l2u4" name="cardbox" src="gq7m5e" fileName="Main_style_2/turn/Gcm_box_4.xml" xy="1281,-296" pivot="0.5,0.5">
<gearDisplay controller="state" pages="1,3"/> <gearDisplay controller="state" pages="1,3"/>
<gearXY controller="3d" pages="0,1" values="1281,-296|603,254"/> <gearXY controller="3d" pages="0,1" values="1281,-296|603,254"/>
@ -105,10 +107,10 @@
<gearDisplay controller="state" pages="3"/> <gearDisplay controller="state" pages="3"/>
<Button icon="ui://v0j9abjylj2n17t"/> <Button icon="ui://v0j9abjylj2n17t"/>
</component> </component>
<component id="n155_gi99" name="player_card_info2" src="inqx13x" fileName="Main_new/Main_new_2/Player_card_info_2_2.xml" xy="370,52"> <component id="n155_gi99" name="player_card_info2" src="inqx13x" fileName="Main_new/Main_new_2/Player_card_info_2_2.xml" xy="370,52" size="1347,101">
<gearDisplay controller="state" pages="1,3,4"/> <gearDisplay controller="state" pages="1,3,4"/>
</component> </component>
<component id="n118_pkx5" name="player_card_info1" src="inqx13w" fileName="Main_new/Main_new_2/Player_card_info_2_1.xml" xy="9,975"> <component id="n118_pkx5" name="player_card_info1" src="inqx13w" fileName="Main_new/Main_new_2/Player_card_info_2_1.xml" xy="9,975" size="2532,186">
<gearDisplay controller="state" pages="1,3,4"/> <gearDisplay controller="state" pages="1,3,4"/>
<relation target="" sidePair="width-width,bottom-bottom"/> <relation target="" sidePair="width-width,bottom-bottom"/>
</component> </component>
@ -128,7 +130,7 @@
<component id="n115_pkx5" name="player_info1_1" src="pkx5so" fileName="Main_new/Main/PlayerHead_1.xml" xy="100,808" size="153,120"> <component id="n115_pkx5" name="player_info1_1" src="pkx5so" fileName="Main_new/Main/PlayerHead_1.xml" xy="100,808" size="153,120">
<gearDisplay controller="state" pages="0,2"/> <gearDisplay controller="state" pages="0,2"/>
<gearXY controller="state" pages="0,1,2" values="1189,921|100,808|1183,921" default="1183,921"/> <gearXY controller="state" pages="0,1,2" values="1189,921|100,808|1183,921" default="1183,921"/>
<gearSize controller="state" pages="0,1" values="153,120,1,1|153,120,1,1" default="144,144,1,1"/> <gearSize controller="state" pages="0,1" values="153,132,1,1|153,120,1,1" default="144,144,1,1"/>
<relation target="" sidePair="center-center,bottom-bottom"/> <relation target="" sidePair="center-center,bottom-bottom"/>
</component> </component>
<component id="n141_lu84" name="player_info1_2" src="pkx5so" fileName="Main_new/Main/PlayerHead_1.xml" xy="56,796" size="153,132"> <component id="n141_lu84" name="player_info1_2" src="pkx5so" fileName="Main_new/Main/PlayerHead_1.xml" xy="56,796" size="153,132">

View File

@ -38,5 +38,6 @@
<relation target="" sidePair="center-center"/> <relation target="" sidePair="center-center"/>
</component> </component>
<component id="n33_xo4i" name="n33" src="xo4i1br" fileName="Main_new/Main/Component/btn_vipCancel.xml" xy="1037,715"/> <component id="n33_xo4i" name="n33" src="xo4i1br" fileName="Main_new/Main/Component/btn_vipCancel.xml" xy="1037,715"/>
<component id="n34_ta4f" name="btn_close" src="vg2c4" fileName="buttons/Btn_close.xml" pkg="27vd145b" xy="1312,19" visible="false" touchable="false"/>
</displayList> </displayList>
</component> </component>

View File

@ -88,5 +88,5 @@ TextureImporter:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0 pSDShowRemoveMatteOption: 0
userData: userData:
assetBundleName: assetBundleName: base/family/b23cba4d4e164d6d5cb3cff916b9e0a4
assetBundleVariant: assetBundleVariant:

View File

@ -1,5 +1,9 @@
fileFormatVersion: 2 fileFormatVersion: 2
<<<<<<< HEAD
guid: 3ad3937da18bb154e8135801fe276a86 guid: 3ad3937da18bb154e8135801fe276a86
=======
guid: f5dfe2527407f0847b118e5033b6d3ca
>>>>>>> 2e92757ba3fe3e5c4b058b254d41c2efd68dec7a
TextureImporter: TextureImporter:
internalIDToNameTable: [] internalIDToNameTable: []
externalObjects: {} externalObjects: {}
@ -88,5 +92,9 @@ TextureImporter:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0 pSDShowRemoveMatteOption: 0
userData: userData:
<<<<<<< HEAD
assetBundleName: assetBundleName:
=======
assetBundleName: base/main_majiang/d2fa434d27dc07bf09395dc32491060b
>>>>>>> 2e92757ba3fe3e5c4b058b254d41c2efd68dec7a
assetBundleVariant: assetBundleVariant:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 KiB

After

Width:  |  Height:  |  Size: 679 KiB

View File

@ -11,7 +11,15 @@ TrueTypeFontImporter:
fontName: Alibaba PuHuiTi 3.0 fontName: Alibaba PuHuiTi 3.0
fontNames: fontNames:
- Alibaba PuHuiTi 3.0 - Alibaba PuHuiTi 3.0
fallbackFontReferences: [] fallbackFontReferences:
- {instanceID: 0}
- {instanceID: 0}
- {instanceID: 0}
- {instanceID: 0}
- {instanceID: 0}
- {instanceID: 0}
- {instanceID: 0}
- {instanceID: 0}
customCharacters: customCharacters:
fontRenderingMode: 0 fontRenderingMode: 0
ascentCalculationMode: 1 ascentCalculationMode: 1

View File

@ -11,7 +11,8 @@ TrueTypeFontImporter:
fontName: FZCuYuan-M03 fontName: FZCuYuan-M03
fontNames: fontNames:
- FZCuYuan-M03 - FZCuYuan-M03
fallbackFontReferences: [] fallbackFontReferences:
- {fileID: 12800000, guid: 545e9f78c59b7c94ca8552daa0397675, type: 3}
customCharacters: customCharacters:
fontRenderingMode: 0 fontRenderingMode: 0
ascentCalculationMode: 1 ascentCalculationMode: 1

View File

@ -24,34 +24,34 @@
"bundle": "extend/poker2/suoha" "bundle": "extend/poker2/suoha"
}, },
{ {
"ver": "1.0.28", "ver": "1.0.30",
"name": "南城麻将", "name": "南城麻将",
"check": true, "check": true,
"version": "1.0.28", "version": "1.0.30",
"game_id": "86", "game_id": "86",
"bundle": "extend/majiang/nancheng" "bundle": "extend/majiang/nancheng"
}, },
{ {
"ver": "1.0.29", "ver": "1.0.31",
"name": "黎川麻将", "name": "黎川麻将",
"check": true, "check": true,
"version": "1.0.29", "version": "1.0.31",
"game_id": "87", "game_id": "87",
"bundle": "extend/majiang/lichuan" "bundle": "extend/majiang/lichuan"
}, },
{ {
"ver": "1.0.15", "ver": "1.0.17",
"name": "金溪麻将", "name": "金溪麻将",
"check": true, "check": true,
"version": "1.0.15", "version": "1.0.17",
"game_id": "88", "game_id": "88",
"bundle": "extend/majiang/jinxi" "bundle": "extend/majiang/jinxi"
}, },
{ {
"ver": "1.0.14", "ver": "1.0.16",
"name": "抚州麻将", "name": "抚州麻将",
"check": true, "check": true,
"version": "1.0.14", "version": "1.0.16",
"game_id": "89", "game_id": "89",
"bundle": "extend/majiang/fuzhou" "bundle": "extend/majiang/fuzhou"
} }