diff --git a/lua_probject/extend_project/extend/majiang/hechi/CS_Win_Type.lua b/lua_probject/extend_project/extend/majiang/hechi/CS_Win_Type.lua index 848d1957..f0196d0d 100644 --- a/lua_probject/extend_project/extend/majiang/hechi/CS_Win_Type.lua +++ b/lua_probject/extend_project/extend/majiang/hechi/CS_Win_Type.lua @@ -20,7 +20,7 @@ local CS_Win_Type = { "碰碰胡清一色", "碰碰胡混一色", "门清", - "字一色", + "吃三比", "抢杠胡", "杠上开花", "杠上炮", diff --git a/lua_probject/extend_project/extend/majiang/hechi/CardCheck.lua b/lua_probject/extend_project/extend/majiang/hechi/CardCheck.lua index d895b659..daeb2431 100644 --- a/lua_probject/extend_project/extend/majiang/hechi/CardCheck.lua +++ b/lua_probject/extend_project/extend/majiang/hechi/CardCheck.lua @@ -72,9 +72,17 @@ function M:rollBack() end function M:tryShunzi(card) - if (card < 400 and card % 100 > 7) then + + -- 排除字牌: + if card >= 400 then return false end + + -- 【原有逻辑】排除序数牌中的8和9作为顺子头(因为8,9,10或9,10,11不存在) + if (card % 100 > 7) then + return false + end + if (checkCard(card + 1, self.cardList) and checkCard(card + 2, self.cardList)) then removeCard(self.cardList, card, 1) removeCard(self.cardList, card + 1, 1) @@ -129,7 +137,14 @@ function M:tryKezi2Zhong(card) return false end -function M:tryShunzi1Zhong(card) +function M:tryShunzi1Zhong(card) + + --排除字牌 + if card >= 400 then + return false + end + + if (card % 100 > 8) then return false end @@ -277,6 +292,13 @@ function M:checkLanPai() -- 获取赖子的数量 local laiziCount = self.zhong_count + + -- 检查总牌数是否为 14 + if (#cardList + laiziCount) ~= 14 then + -- 如果总数不对,直接返回 false + -- 除非你们允许非标准张数胡牌,否则建议加上这一行 + return false + end -- 特殊情况处理:全赖子 if #cardList == 0 then @@ -431,6 +453,7 @@ local function init(self,cardInhand,addCard,isZhong,qidui,eightLaizi) --printlog("添加排序====>>>") --pt(self.cardList) return self:checkLanPai() or self:checkQidui() or self:tryWin() + end local specialCardList={401,402,403,404,502,503,501} diff --git a/lua_probject/extend_project/extend/majiang/hechi/EXClearingView.lua b/lua_probject/extend_project/extend/majiang/hechi/EXClearingView.lua index 4d76f4b5..c9ef0138 100644 --- a/lua_probject/extend_project/extend/majiang/hechi/EXClearingView.lua +++ b/lua_probject/extend_project/extend/majiang/hechi/EXClearingView.lua @@ -272,14 +272,21 @@ function M:FillItemData(room, data, item, active_player, niao) local gangadd = data["gang_score"] local birdadd = data["niao_score"] local total = data["round_score"] - local sp = " " - local str = "胡:" .. huadd .. "分" - str = str .. sp .. "杠:" .. gangadd .. "分" + local sp = "" + --local str = "胡:" .. huadd .. "分" + local str = "" + --str = str .. sp .. "杠:" .. gangadd .. "分" + if gangadd~=0 then + str = str .. sp .. "杠:" .. gangadd .. "分" + end -- str = str .. sp .. "扎鸟:" .. birdadd .. "分" if data["piao_niao_score"] then str = str .. sp .. "飘鸟:" .. data["piao_niao_score"] .. "分" end - item:GetChild("score1").text = str + if item:GetChild("score1") then + item:GetChild("score1").text = str + end + -- local total_score = data["total_score"] if total >= 0 then item:GetChild("score2win").text = "+" .. total @@ -296,6 +303,7 @@ function M:FillItemData(room, data, item, active_player, niao) local is_win = data["is_win"] or false local str1="" sp="、" + local chiSanBiStr = "" if is_win then if win_list then if DataManager.CurrenRoom.isZiMoHu then @@ -303,31 +311,41 @@ function M:FillItemData(room, data, item, active_player, niao) else str1="接炮" end + -- 1. 先计算中鸟数量 (zhongNiaoCount) + local zhongNiaoCount = 0 + if niao and #niao > 0 then + for i, v in ipairs(niao) do + if v.score > 0 then + zhongNiaoCount = zhongNiaoCount + 1 + end + end + end + + local baseScore = 0 -- 用于记录胡牌的基础总分 for i=1,#win_list do local huName=Hu_Type_Name[win_list[i].type] if huName then -- 如果是自摸或点炮,不拼接 x分数 if huName ~= "自摸" and huName ~= "点炮" then - str1=str1..sp..huName.."x"..win_list[i].score + if huName == "吃三比" then + chiSanBiStr = sp .. huName .. "x" .. win_list[i].score + elseif huName == "杠上花" then + str1 = str1 .. sp .. huName .. "x" .. win_list[i].score + else + str1=str1..sp..huName.."+"..win_list[i].score + end end end end - str1=str1.." +"..huadd.."分" - - -- 鸟牌总数量 - if niao and #niao > 0 then - local zhongNiaoCount = 0 - for i, v in ipairs(niao) do - -- 假设 v.score 为 1 表示中鸟(具体值请根据服务器协议确认,有时可能是 >0) - if v.score > 0 then - zhongNiaoCount = zhongNiaoCount + 1 + -- “吃三比” + if chiSanBiStr ~= "" then + str1 = str1 .. chiSanBiStr end - end - - if zhongNiaoCount > 0 then - str1 = str1 .. "x" .. zhongNiaoCount - end - end + if zhongNiaoCount > 0 then + local finalScore = huadd * zhongNiaoCount + str1 = str1 ..sp.. "钓鱼+" .. finalScore + end + end else @@ -418,9 +436,6 @@ function M:FillItemData(room, data, item, active_player, niao) -- end end - -- - printlog("牌型计算==>>>",str1) - if data["ming_gang_num"]>0 then str1=str1.." 明杠x"..data["ming_gang_num"] end @@ -437,7 +452,7 @@ function M:FillItemData(room, data, item, active_player, niao) if gangadd>0 then str1=str1.." +"..gangadd.."分" else - str1=str1.." "..gangadd.."分" + --str1=str1.." "..gangadd.."分" end end @@ -459,8 +474,6 @@ function M:FillItemData(room, data, item, active_player, niao) end end - - item:GetChild("score3").text=str1 item:GetChild("score4").text=str1 diff --git a/lua_probject/extend_project/extend/majiang/hechi/EXGameController.lua b/lua_probject/extend_project/extend/majiang/hechi/EXGameController.lua index 31a81dea..f3a751dd 100644 --- a/lua_probject/extend_project/extend/majiang/hechi/EXGameController.lua +++ b/lua_probject/extend_project/extend/majiang/hechi/EXGameController.lua @@ -56,6 +56,7 @@ end function M:ReqResidueCard() local _data = {} _data["card"] = 0 + local _client = ControllerManager.GameNetClinet _client:send(TX_Protocol.GAME_RESIDUE_CARD, _data) end @@ -162,6 +163,8 @@ end function M:OnEventOutCard(evt_data) local seat = evt_data["seat"] local card = evt_data["card"] + printlog("OnEventOutCard----------------------------------------------") + pt(evt_data) local ting_list = nil local p = self._room:GetPlayerBySeat(seat) self._cacheEvent:Enqueue(function() diff --git a/lua_probject/extend_project/extend/majiang/hechi/EXMainView.lua b/lua_probject/extend_project/extend/majiang/hechi/EXMainView.lua index 84dcb0dc..04703325 100644 --- a/lua_probject/extend_project/extend/majiang/hechi/EXMainView.lua +++ b/lua_probject/extend_project/extend/majiang/hechi/EXMainView.lua @@ -14,6 +14,10 @@ function M.new() local self = setmetatable({}, {__index = M}) self.class = "MainView" self.asset_group = "HeChi_MJ" + -- 初始化锁定吃牌具体变量 + self._lockedCardForChi = nil + + self:init() ViewUtil.PlayMuisc(self.asset_group, "extend/majiang/hechi/sound/bg.mp3") return self @@ -504,6 +508,12 @@ function M:OutCard(card) self:RemoveCursor() info:UpdateHandCard() + -- 出牌成功后,解除吃牌带来的出牌限制 + self._lockedCardForChi = nil + + -- 刷新手牌以恢复按钮状态 + self._player_card_info[1]:UpdateHandCard() + info:UpdateOutCardList(nil, card, self._cursor) self:PlaySound("HeChi_MJ", self._room.self_player.self_user.sex,tostring(card)) self:PlayMJSound("chupai.mp3") @@ -638,6 +648,9 @@ function M:_ChiView(tiplist, callback) self._pop_tip_choice = _pop_tip_choice end + + + function M:OnFangziAction(...) self:__CloseTip() local arg = {...} @@ -646,6 +659,15 @@ function M:OnFangziAction(...) local player = arg[2] local index = arg[3] printlog("OnFangziAction") + + -- 计算锁定状态,保存到 self._lockedCardForChi + if player.seat == self._room.self_player.seat and fz.type == FZType.Chi then + self:CalculateChiLockCard(fz) + else + -- 如果不是吃,或者不是自己,清除锁定(防止上一局的残留) + self._lockedCardForChi = nil + end + local info = _player_card_info[self:GetPos(player.seat)] local pNode = info._mask_liangpai local effect = UIPackage.CreateObject("Extend_MJ_HeChi", "FzEffect") @@ -688,6 +710,51 @@ function M:OnFangziAction(...) self:__CloseTip() end +-- 计算哪张牌需要变暗 +function M:CalculateChiLockCard(fz) + -- 排序得到顺子的 min 和 max + local seq = {fz.opcard[1], fz.opcard[2], fz.opcard[3]} + table.sort(seq) + + local minVal = seq[1] + local maxVal = seq[3] + local eatenCard = fz.card -- 吃进的那张牌 + + local targetCard = nil + + -- 判断逻辑 + if eatenCard == minVal then + -- 吃进的是最小牌 (例如吃1, 顺子1-2-3), 锁定 max + 1 (即4) + targetCard = maxVal + 1 + elseif eatenCard == maxVal then + -- 吃进的是最大牌 (例如吃4, 顺子2-3-4), 锁定 min - 1 (即1) + targetCard = minVal - 1 + else + -- 吃进中间牌,通常不锁定,或者根据具体玩法定义 + targetCard = nil + end + + -- 验证目标牌是否真的在手牌中 (可选,为了严谨) + if targetCard then + local hasCard = false + for _, c in ipairs(self._room.self_player.card_list) do + if c == targetCard then + hasCard = true + break + end + end + if hasCard then + self._lockedCardForChi = targetCard + else + self._lockedCardForChi = nil + end + else + self._lockedCardForChi = nil + end +end + + + function M:RunNiao(list, start_seat) local _room = self._room --local _niao_View = self._niao_View diff --git a/lua_probject/extend_project/extend/majiang/hechi/ExtendConfig.lua b/lua_probject/extend_project/extend/majiang/hechi/ExtendConfig.lua index 127b9dd1..abae31e5 100644 --- a/lua_probject/extend_project/extend/majiang/hechi/ExtendConfig.lua +++ b/lua_probject/extend_project/extend/majiang/hechi/ExtendConfig.lua @@ -110,7 +110,15 @@ function M:FillRoomData(s2croom) local fz = {} fz.type = op["type"] fz.card = op["card"] + if (fz.type == FZType.Chi) then + local data = {} + data[1] = op["opcard"][1] + data[2] = fz.card + data[3] = op["opcard"][2] + fz.opcard = data + end p.fz_list[#p.fz_list + 1] = fz + end if not playing and room.curren_round > 0 then self.GetGameController():PlayerReady() diff --git a/lua_probject/extend_project/extend/majiang/hechi/MJPlayerSelfCardInfoView.lua b/lua_probject/extend_project/extend/majiang/hechi/MJPlayerSelfCardInfoView.lua index a3253602..c6191541 100644 --- a/lua_probject/extend_project/extend/majiang/hechi/MJPlayerSelfCardInfoView.lua +++ b/lua_probject/extend_project/extend/majiang/hechi/MJPlayerSelfCardInfoView.lua @@ -32,9 +32,13 @@ function M:ShowHuTip(card_list) end function M:UpdateHandCard(getcard, mp) + --调用父类方法完成基础的手牌布局和图片填充 MJPlayerSelfCardInfoView.UpdateHandCard(self, getcard, mp) local _carViewList = self._carViewList + -- 2. 获取主视图(EXMainView)中计算好的“被锁定牌ID” + local lockedCard = self._mainView._lockedCardForChi + if DataManager.CurrenRoom.laiziInfo and #self._carViewList>0 then for i=1,#self._carViewList do local obj=self._carViewList[i] @@ -44,7 +48,6 @@ function M:UpdateHandCard(getcard, mp) if obj.card:GetController("laizi") then obj.card:GetController("laizi").selectedIndex=1 end - end else if obj.card.GetController then @@ -56,15 +59,27 @@ function M:UpdateHandCard(getcard, mp) end end - - end - - local card_list = DataManager.CurrenRoom.self_player.card_list - - self:ShowHuTip(card_list) + + -- 遍历手牌按钮,应用“变暗/禁用”状态 + for i = 1, #_carViewList do + local btn = _carViewList[i].card + local cardId = self:GetCard(btn) -- 获取当前按钮代表的牌ID + + -- 判断当前牌是否等于被锁定的牌 + if lockedCard and cardId == lockedCard then + -- 如果是被锁定的牌:禁止点击,降低透明度 + btn.touchable = false + btn.alpha = 0.5 + else + -- 如果不是被锁定的牌:恢复正常 + btn.touchable = true + btn.alpha = 1 + end + end + if getcard then self._out_card = true local card_list = membe_clone(DataManager.CurrenRoom.self_player.card_list) @@ -75,6 +90,15 @@ function M:UpdateHandCard(getcard, mp) for i = 1, #_carViewList do local btn = _carViewList[i].card local card = self:GetCard(btn) + + -- 如果这张牌被锁定了,直接跳过听牌计算,并清除标记 + if lockedCard and card == lockedCard then + if btn:GetController("mark_ting") then + btn:GetController("mark_ting").selectedIndex = 0 + end + goto continue + end + list_remove(card_list, card) local tingList = CardCheck.MuiltiplteCaculateTingPai(card_list, true, true, DataManager.CurrenRoom.room_config.Qidui, DataManager.CurrenRoom.room_config.Laizi) if #tingList > 0 then @@ -89,6 +113,7 @@ function M:UpdateHandCard(getcard, mp) table.insert(lst_mark, tem) end table.insert(card_list, card) + ::continue:: end table.sort(lst_mark, function(a, b) return a.count > b.count @@ -154,6 +179,7 @@ function M:__OnClickHandCard(context) local card = button.data self._mainView:OutCard(card.card_item) end + end function M:__OnDragStart(card) diff --git a/wb_new_ui/.objs/metas/2d9xdj6z/fn7fao.info b/wb_new_ui/.objs/metas/2d9xdj6z/fn7fao.info index 2f29def0..8bf6106f 100644 --- a/wb_new_ui/.objs/metas/2d9xdj6z/fn7fao.info +++ b/wb_new_ui/.objs/metas/2d9xdj6z/fn7fao.info @@ -3,6 +3,9 @@ "n100_lumr": { "hidden": true }, + "n166_ik9v": { + "hidden": true + }, "n157_btip": { "hidden": true }, diff --git a/wb_new_ui/.objs/metas/m7iejg46/hsbhhjn.info b/wb_new_ui/.objs/metas/m7iejg46/hsbhhjn.info index d0847d49..d1a4186b 100644 --- a/wb_new_ui/.objs/metas/m7iejg46/hsbhhjn.info +++ b/wb_new_ui/.objs/metas/m7iejg46/hsbhhjn.info @@ -1,19 +1,23 @@ { "objectStatus": { - "n87_csp4": { - "hidden": true - }, - "n79_ovii": { - "hidden": true - }, "n97_hz87": { "hidden": true }, "n98_hz87": { "hidden": true }, + "n96_hz87": { + "hidden": true, + "collapsed": true + }, "n95_hz87": { "hidden": true + }, + "n87_csp4": { + "hidden": true + }, + "n79_ovii": { + "hidden": true } }, "fitScreen": "FitSize" diff --git a/wb_new_ui/.objs/metas/v0j9abjy/gq7mcu.info b/wb_new_ui/.objs/metas/v0j9abjy/gq7mcu.info index f4f1a8e6..b1258693 100644 --- a/wb_new_ui/.objs/metas/v0j9abjy/gq7mcu.info +++ b/wb_new_ui/.objs/metas/v0j9abjy/gq7mcu.info @@ -2,6 +2,9 @@ "objectStatus": { "n51_tki6": { "hidden": true + }, + "n6_fux2": { + "hidden": true } } } \ No newline at end of file diff --git a/wb_new_ui/.objs/workspace.json b/wb_new_ui/.objs/workspace.json index 8b237405..553388ff 100644 --- a/wb_new_ui/.objs/workspace.json +++ b/wb_new_ui/.objs/workspace.json @@ -4,21 +4,22 @@ "doc.openedDocs": [ "ui://m7iejg46yvb27ik0", "ui://m7iejg46hsbhhjn", - "ui://m7iejg4610snh5j", - "ui://m7iejg46imp57ih3", "ui://v0j9abjygq7md1", - "ui://v0j9abjygq7med", - "ui://v0j9abjygq7mcu", - "ui://27vd145bik9v7ijw", "ui://v0j9abjygq7mct", - "ui://4skil1l6piv91o5", - "ui://m7iejg46t1hqhy5", - "ui://m7iejg46t1hqhxw" + "ui://27vd145bl0lz9", + "ui://27vd145bcjli6", + "ui://v0j9abjygq7md3", + "ui://v0j9abjygq7med", + "ui://2d9xdj6zfn7fao", + "ui://v0j9abjygq7mcu", + "ui://v0j9abjygq7m3", + "ui://v0j9abjygq7m85", + "ui://m7iejg46t1hqhy5" ], "test.device": "iPhone XR", "canvasColor": 10066329, "auxline2": true, - "doc.activeDoc": "ui://v0j9abjygq7med", + "doc.activeDoc": "ui://2d9xdj6zfn7fao", "libview.twoColumn": false, "libview.expandedNodes": [ "27vd145b", @@ -48,6 +49,8 @@ "v0j9abjy", "/component/", "v0j9abjy", + "/component/card/", + "v0j9abjy", "/component/clearing/", "v0j9abjy", "/component/clearing/clearing1/", diff --git a/wb_new_ui/assets/Lobby/Main.xml b/wb_new_ui/assets/Lobby/Main.xml index 2ac71adf..6b684a56 100644 --- a/wb_new_ui/assets/Lobby/Main.xml +++ b/wb_new_ui/assets/Lobby/Main.xml @@ -3,7 +3,7 @@ - + @@ -45,8 +45,8 @@