Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1070 рядки
32 KiB

  1. local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine")
  2. local MJ = MJFramework.MJImport("mj.luaScript.Views.Game.MJ")
  3. local MJWanFa=MJFramework.ImportWanFa("luaScript.SubGameDefine.MaJiang.MJWanFa")
  4. local CardClass = require(MJDefine.MJConfig_2d.MAHJONG_CARD) -- 麻将牌
  5. local MJRoomXiaoJuView = MJFramework.MJFrameworkClassImprot("mj.luaScript.Views.Room.MJRoomXiaoJuView")
  6. local xueliuRoomXiaoJuView = class("xueliuRoomXiaoJuView", MJRoomXiaoJuView)
  7. local MJ_WIDTH=47
  8. --起始位置
  9. local MJ_HAND_CARD_INIT_X=130+30
  10. local MJ_HAND_CARD_INIT_Y=40+5
  11. local MJ_GROUP_CARD_INIT_X=100
  12. local MJ_OPERATE_CARD_INIT_Y = 45 -- 操作牌y轴
  13. --麻将组间隔
  14. local MJ_GROUP_PADDING_X=0
  15. --麻将直接间隔
  16. local MJ_HANDCARD_PADDING_X = -38 -- 手牌麻将直接间隔(牌与牌)
  17. local MJ_OPERATE_PADDING_X = -3 -- 操作麻将直接间隔(牌与牌)
  18. --胡牌麻将间隔
  19. local MJ_HU_X=8
  20. --暗杠上面的牌Y轴偏移量
  21. local GANG_OFFSET_Y=13
  22. --麻将直接间隔
  23. local MJ_PADDING_X=-3
  24. local MJ_HANDCARD_SCALE = 0.6 -- 手牌麻将的缩小值
  25. local MJ_OPERATE_SCALE = 0.75 -- 操作麻将的缩小值
  26. local IS_SHOW_ANGANG_CARD = false -- 暗杠牌是否要显示起来
  27. function xueliuRoomXiaoJuView:ctor(...)
  28. xueliuRoomXiaoJuView.super.ctor(self,...)
  29. if self.desktopType == MJDefine.DesktopType.ThreeD then
  30. self.desktopType = MJDefine.DesktopType.TwoD
  31. end
  32. end
  33. function xueliuRoomXiaoJuView:loadUI()
  34. local ui = loadUI("mj_xueliu/res/ui_fangjian/mj_xueliu_xiaoju_jiesuan.ui")
  35. self.ui = ui
  36. self:addChild(ui)
  37. end
  38. function xueliuRoomXiaoJuView:onEnter()
  39. xueliuRoomXiaoJuView.super.onEnter(self)
  40. --self:createLuoBo()
  41. --local pos = self.ui.Items.Button_Next:getPosition()
  42. --self.ui.Items.Text_Tip_1:setPositionX(pos.x + 140)
  43. --self.ui.Items.Text_Tip_2:setPositionX(pos.x + 140)
  44. end
  45. function xueliuRoomXiaoJuView:initPlayerView()
  46. local roomInfo=app.room.roomInfo
  47. self.ui.Items.Layout_Player:removeAllChildren()
  48. self.items={}
  49. for k,v in pairs(roomInfo.memberList) do
  50. local userId = app.room:getViewIdByUserId(v.nUserId)
  51. local nSeatId = app.room:getSeatIdByViewId(userId)
  52. local i = nSeatId+1
  53. local item=self:createPlayerItem()
  54. self:setPlayerItemInfo(item,v)
  55. self.items[i]=item
  56. -- table.insert(self.items,)
  57. end
  58. for i=1,4 do
  59. if self.items[i] then
  60. self.ui.Items.Layout_Player:addChild(self.items[i])
  61. end
  62. end
  63. end
  64. function xueliuRoomXiaoJuView:createPlayerItem()
  65. local ui=loadUI("mj_xueliu/res/ui_fangjian/mj_xueliu_xiaoju_item.ui")
  66. autoAdapt(ui)
  67. return ui
  68. end
  69. function xueliuRoomXiaoJuView:setPlayerItemInfo(ui,player)
  70. local roomInfo=app.room.roomInfo
  71. local nSeatId = app.room:getSeatIdByUserId(player.nUserId)
  72. local resultInfo=roomInfo.memberList
  73. local bg = "ImageView_ItemBg"--"ImageView_Win_"..i..""
  74. -- local bg2 = "ImageView_ItemBg_2"
  75. -- local lose = "ImageView_Lose_"..i
  76. local head = "ImageView_Head"
  77. local name = "Text_Name"
  78. local benJuScore = "TextBMFont_Score"
  79. local benJuScore1 = "Text_Score"
  80. local hu = "ImageView_Hu"
  81. local info = "Button_Info"
  82. local result="Text_ResultInfo"
  83. --local gangfen = "Text_GangFen"
  84. --local hufen = "Text_HuFen"
  85. --ui.Items.TextBMFont_Score:setVisible(false)
  86. local nodeBg = ui.Items[bg]
  87. -- local nodeBg2 = ui.Items[bg2]
  88. -- local nodeLose = self.ui.Items[lose]
  89. local nodeHead = ui.Items[head]
  90. local nodeName = ui.Items[name]
  91. local nodeBenJu = ui.Items[benJuScore]
  92. local bmFontScore = true
  93. if not nodeBenJu then
  94. nodeBenJu = ui.Items[benJuScore1]
  95. bmFontScore = false
  96. end
  97. local nodeHu = ui.Items[hu]
  98. local nodeBanker= ui.Items.ImageView_Banker
  99. local nodeResult= ui.Items[result]
  100. local btnDetail = ui.Items["Button_Detail"];
  101. btnDetail:registerClick(function ()
  102. if app.room.roomInfo.flowInfo then
  103. logD("服务端主动推过来的数据")
  104. local flowView = MJFramework.MJImport("mj_xueliu.luaScript.Views.Compnent.xueliuFlowView"):new(app.room.roomInfo.flowInfo[player.nUserId]);
  105. self:addChild(flowView);
  106. else
  107. logD("我主动请求流水数据")
  108. app.room:requestFlowInfoReq(player.nUserId)
  109. end
  110. end);
  111. --local nodeGangfen = ui.Items[gangfen]
  112. --local nodeHufen = ui.Items[hufen]
  113. --local infoStr = self:setHuType(player.nUserId)
  114. --nodeResult:setText(infoStr)
  115. nodeResult:setText("")
  116. local userInfo = app.room:getUserInfo(player.nUserId)
  117. --先设置默认头像
  118. local width = nodeHead:getContentSize().width
  119. local nickname = ""
  120. if userInfo and userInfo.nickname then
  121. nickname = getSubStringNickname(userInfo.nickname)
  122. self:updateUserHead(nodeHead,player.nUserId, userInfo.sex, userInfo.headimgurl);
  123. end
  124. nodeName:setText(nickname)
  125. --显示隐藏游戏内选手id(主办人和管理员不限制,只针对海选赛) -- todo lwq
  126. -- begin
  127. local ClubDefine = require("luaScript.Protocol.Club.ClubDefine")
  128. if app.club_php.clubID and app.club_php.clubID ~= 0 then
  129. if app.club_php:getCestIsOpen(app.club_php.clubID) then
  130. --隐私数据
  131. local clubInfo = app.club_php.clubList[app.club_php.clubID]
  132. self.cliext = clubInfo.groupext and clubInfo.groupext.cliext
  133. if not self.cliext or not self.cliext.is_hideUid or (self.cliext and self.cliext.is_hideUid == 1) then
  134. if clubInfo.role == ClubDefine.Job.Creator or clubInfo.role == ClubDefine.Job.Manager then
  135. nodeName:setVisible(true)
  136. else
  137. nodeName:setVisible(false)
  138. end
  139. end
  140. end
  141. end
  142. if player.nUserId == tonumber(app.user.loginInfo.uid) then
  143. nodeName:setVisible(true)
  144. end
  145. -- end
  146. nodeHu:setVisible(false)
  147. -- todo lwq 产品说隐藏字体 begin
  148. -- if player.result>0 then
  149. -- nodeHu:setVisible(true)
  150. -- local orderNum = cc.Sprite:create("mj/res/ui/zy_fangjian/operate/mj_effect_num"..player.huOrder..".png")
  151. -- if player.result == MJDefine.MJGameHuType.HU_ZIMO then--自摸 huOrder
  152. -- nodeHu:loadTexture("mj/res/ui/zy_fangjian/operate/mj_effect_zimo.png")
  153. -- orderNum:setPosition(cc.p(260,65))
  154. -- if player.huOrder == 1 then
  155. -- local posSpr = self:createFromPos(nil,nSeatId+1)
  156. -- local tPos = nodeHu:getPosition()
  157. -- tPos.x = tPos.x - 20
  158. -- tPos.y = tPos.y - 46
  159. -- posSpr:setPosition(tPos)
  160. -- nodeHu:getParent():addChild(posSpr)
  161. -- else
  162. -- local index = 0
  163. -- for k,v in pairs(roomInfo.memberList) do
  164. -- if v.result <= 0 or v.huOrder > player.huOrder then
  165. -- local formUid = v.nUserId
  166. -- local posSpr = self:createFromPos(formUid,nSeatId+1)
  167. -- local tPos = nodeHu:getPosition()
  168. -- tPos.y = tPos.y - 46
  169. -- tPos.x = tPos.x + index*40
  170. -- posSpr:setPosition(tPos)
  171. -- nodeHu:getParent():addChild(posSpr)
  172. -- index = index + 1
  173. -- end
  174. -- end
  175. -- end
  176. -- elseif player.result == MJDefine.MJGameHuType.HU_DIANPAO or player.result == MJDefine.MJGameHuType.HU_QIANGGANG then --点炮胡
  177. -- nodeHu:loadTexture("mj/res/ui/zy_fangjian/operate/mj_effect_jiepao.png")
  178. -- orderNum:setPosition(cc.p(300,65))
  179. -- local formUid = app.room:getUserIdBySeatId(player.dpSeatId)
  180. -- local posSpr = self:createFromPos(formUid,nSeatId+1)
  181. -- local tPos = nodeHu:getPosition()
  182. -- tPos.y = tPos.y - 46
  183. -- posSpr:setPosition(tPos)
  184. -- nodeHu:getParent():addChild(posSpr)
  185. -- end
  186. -- nodeHu:addChild(orderNum)
  187. -- end
  188. -- --黄庄才会查叫和查花猪
  189. -- if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then
  190. -- if player.result <= 0 and player.isDj == 1 then
  191. -- nodeHu:loadTexture("mj/res/ui/zy_fangjian/operate/mj_effect_chajiao.png")
  192. -- nodeHu:setVisible(true)
  193. -- nodeHu:setScale(0.3)
  194. -- local noTingNum = 0--没有胡牌和听牌的玩家数
  195. -- for k,v in pairs(roomInfo.memberList) do
  196. -- if v.result <= 0 and v.isDj ~= 1 then
  197. -- noTingNum = noTingNum + 1
  198. -- end
  199. -- end
  200. -- for k,v in pairs(roomInfo.memberList) do
  201. -- local index = 1
  202. -- if v.result <= 0 and v.isDj ~= 1 then
  203. -- local formUid = v.nUserId
  204. -- local posSpr = self:createFromPos(formUid,nSeatId+1)
  205. -- local tPos = nodeHu:getPosition()
  206. -- tPos.y = tPos.y - 46
  207. -- if noTingNum > 1 then
  208. -- if index == 1 then
  209. -- tPos.x = -20
  210. -- elseif index == 2 then
  211. -- tPos.x = 20
  212. -- end
  213. -- end
  214. -- posSpr:setPosition(tPos)
  215. -- nodeHu:getParent():addChild(posSpr)
  216. -- index = index + 1
  217. -- end
  218. -- end
  219. -- end
  220. -- --[[if player.result <= 0 and player.isHz == 1 then --花猪
  221. -- nodeHu:loadTexture("mj/res/ui/zy_fangjian/operate/mj_effect_chahuazhu.png")
  222. -- nodeHu:setScale(0.3)
  223. -- nodeHu:setVisible(true)
  224. -- end--]]
  225. -- end
  226. -- todo lwq 产品说隐藏字体 end
  227. if app.room:getUserIdBySeatId(app.room.roomInfo.nBankSeatId)~=player.nUserId then
  228. nodeBanker:setVisible(false)
  229. end
  230. if app.room:getMyUserId() == player.nUserId then
  231. nodeBg:loadTexture("xj_my_bg.png",cc.TextureResType.plistType)
  232. --[[else
  233. nodeBg:loadTexture("xj_other_bg.png",cc.TextureResType.plistType)--]]
  234. end
  235. if tonumber(player.nTurnScore) > 0 then
  236. nodeBenJu:setText("+"..player.nTurnScore)
  237. else
  238. nodeBenJu:setText(player.nTurnScore)
  239. if tonumber(player.nTurnScore) < 0 and bmFontScore == true then
  240. nodeBenJu:setFntFile("res/fonts/dt_jian_num.fnt")
  241. end
  242. end
  243. --番数
  244. ui.Items.Text_FanShu:setText(player.fanshu.."番")
  245. --[[local ganginfo = json.decode(player.ganginfo)
  246. if ganginfo then
  247. nodeGangfen:setText(ganginfo.gangScore or 0)
  248. nodeHufen:setText(ganginfo.huScore or 0)
  249. else
  250. nodeGangfen:setText(0)
  251. nodeHufen:setText(0)
  252. end--]]
  253. --[[ local viewId = app.room:getViewIdByUserId(player.nUserId)
  254. if viewId and viewId>0 and viewId<=4 then
  255. if viewId == 4 then
  256. ui.Items.ImageView_Pos:loadTexture("result_pos_0.png",1)
  257. else
  258. ui.Items.ImageView_Pos:loadTexture(string.format("result_pos_%d.png", viewId), 1)
  259. end
  260. else
  261. ui.Items.ImageView_Pos:setVisible(false)
  262. end--]]
  263. -- ui.Items.ImageView_Pos:loadTexture(string.format("mj_xueliu/res/zy_fangjian/xzddadd/xzdd_xj_Pos_%d.png", nSeatId+1), 0)
  264. -- todo lwq 用服务器下发的
  265. local nSeatId = player.nSeatId
  266. ui.Items.ImageView_Pos:loadTexture(string.format("mj_xueliu/res/zy_fangjian/xzddadd/xzdd_xj_Pos_%d.png", nSeatId+1), 0)
  267. end
  268. function xueliuRoomXiaoJuView:setHuType(userId)
  269. local roomInfo = app.room.roomInfo
  270. local strGameInfo = json.decode(roomInfo.strGameInfo)
  271. local str = ""
  272. local huType1 = {
  273. [1] = "自摸(",
  274. [2] = "接炮(",
  275. [3] = "抢杠胡(",
  276. }
  277. local huOrder1 = 0
  278. local player = roomInfo.memberList[userId]
  279. if player then
  280. huOrder1 = player.huOrder
  281. --胡牌顺序
  282. if player.result == MJDefine.MJGameHuType.HU_ZIMO then
  283. local huNum = 0
  284. --快速成局时,strGameInfo.playnum默认传来的是4人
  285. if strGameInfo.isfaststart == 1 then
  286. huNum = roomInfo.nMaxPlayCount - player.huOrder
  287. else
  288. huNum = strGameInfo.playnum - player.huOrder
  289. end
  290. --str = str..huType1[player.result]..huNum.."家) "
  291. elseif player.result == MJDefine.MJGameHuType.HU_DIANPAO or player.result == MJDefine.MJGameHuType.HU_QIANGGANG then
  292. local viewId = app.room:getViewIdBySeatId(player.dpSeatId)
  293. local userInfo = app.room:getUserInfoByViewId(viewId)
  294. local nickname = getSubStringNickname(userInfo.nickname)
  295. --str = str..huType1[player.result]..nickname..") "
  296. end
  297. --牌型
  298. --[[for k,v in pairs(MJDefine.MJGamePaiType) do
  299. local newType = self:_and(player.huType,v)
  300. if self:_and(player.huType,v) ~= 0 then
  301. local newType = self:_and(player.huType,v)
  302. str = str..MJDefine.MJGameHuStr[newType].." "
  303. end
  304. end--]]
  305. --[[
  306. if MJDefine.MJGameHuStr[player.subPaiType] then
  307. str = str .. MJDefine.MJGameHuStr[player.subPaiType].." "
  308. end
  309. if MJDefine.MJGameHuStr[player.huType] then
  310. str = str .. MJDefine.MJGameHuStr[player.huType].." "
  311. end
  312. --]]
  313. if player.hupaiInfo and player.hupaiInfo ~= nil then
  314. for key,value in pairs (player.hupaiInfo) do
  315. str = str .."("
  316. -- if MJDefine.MJGameHuStr[value.subPaiType] then
  317. -- str = str ..MJDefine.MJGameHuStr[value.subPaiType].." "
  318. -- end
  319. -- if MJDefine.MJGameHuStr[value.huType] then
  320. -- str = str ..MJDefine.MJGameHuStr[value.huType].." "
  321. -- end
  322. if MJDefine.MJGameHuStr[value.subPaiType] then
  323. if MJDefine.MJGameHuStr[value.paiType] then
  324. if value.huType ~= 1 then -- 不是自摸要显示放炮玩家id
  325. -- local fangpaoSeatId = app.room:getSeatIdByUserId(value.fangpaoId)
  326. -- local fangpaoSeatId = app.room:getViewIdBySeatId(value.fangpaoId)
  327. local fangpaoSeatId = value.fangpaoId + 1
  328. local strTemp = "①"
  329. if fangpaoSeatId == 1 then
  330. strTemp = "①"
  331. elseif fangpaoSeatId == 2 then
  332. strTemp = "②"
  333. elseif fangpaoSeatId == 3 then
  334. strTemp = "③"
  335. else
  336. strTemp = "④"
  337. end
  338. str = str ..strTemp..":"..MJDefine.MJGameHuStr[value.subPaiType].." "..MJDefine.MJGameHuStr[value.paiType]
  339. else
  340. str = str ..MJDefine.MJGameHuStr[value.subPaiType].." "..MJDefine.MJGameHuStr[value.paiType]
  341. end
  342. else
  343. str = str ..MJDefine.MJGameHuStr[value.subPaiType]
  344. end
  345. else
  346. if MJDefine.MJGameHuStr[value.paiType] then
  347. if value.huType ~= 1 then -- 不是自摸要显示放炮玩家id
  348. -- local fangpaoSeatId = app.room:getViewIdBySeatId(value.fangpaoId)
  349. local fangpaoSeatId = value.fangpaoId + 1
  350. local strTemp = "①"
  351. if fangpaoSeatId == 1 then
  352. strTemp = "①"
  353. elseif fangpaoSeatId == 2 then
  354. strTemp = "②"
  355. elseif fangpaoSeatId == 3 then
  356. strTemp = "③"
  357. else
  358. strTemp = "④"
  359. end
  360. str = str ..strTemp..":"..MJDefine.MJGameHuStr[value.paiType]
  361. else
  362. str = str ..MJDefine.MJGameHuStr[value.paiType]
  363. end
  364. end
  365. end
  366. if value.isJinGouDiao > 0 then
  367. str = str.." " .. "金钩钓"
  368. end
  369. if value.isHaiDiLaoYue > 0 then
  370. str = str.." " .. "海底捞月"
  371. end
  372. if value.isHaiDiPao > 0 then
  373. str = str.." " .. "海底炮"
  374. end
  375. if value.isGangShangKaiHua > 0 then
  376. str = str.." " .. "杠上开花"
  377. end
  378. if value.isGangShangPao > 0 then
  379. str = str.." " .. "杠上炮"
  380. end
  381. if value.isQiangGangHu > 0 then
  382. str = str.." " .. "抢杠胡"
  383. end
  384. if value.isMenQing > 0 then
  385. str = str.." " .. "门清"
  386. end
  387. if value.isZhongZhang > 0 then
  388. str = str.." " .. "中张"
  389. end
  390. str = str ..")".." "
  391. end
  392. end
  393. --
  394. --[[local specialType = {
  395. ["isJueZhang"] = "绝张",
  396. ["isJinGouDiao"] = "金钩钓",
  397. ["isHaiDiLaoYue"] = "海底捞月",
  398. ["isHaiDiPao"] = "海底炮",
  399. ["isGangShangKaiHua"] = "杠上开花",
  400. ["isGangShangPao"] = "杠上炮",
  401. ["isQiangGangHu"] = "抢杠胡",
  402. ["isMenQing"] = "门清",
  403. ["isZhongZhang"] = "中张",
  404. }--]]
  405. -- if player.result > 0 or player.huType > 0 then
  406. if player.hupaiInfo and player.hupaiInfo ~= nil then
  407. if player.genCount > 0 then
  408. str = str .. player.genCount.."根".." "
  409. end
  410. -- todo lwq
  411. -- if player.isJinGouDiao > 0 then
  412. -- str = str .. "金钩钓".." "
  413. -- end
  414. -- if player.isHaiDiLaoYue > 0 then
  415. -- str = str .. "海底捞月".." "
  416. -- end
  417. -- if player.isHaiDiPao > 0 then
  418. -- str = str .. "海底炮".." "
  419. -- end
  420. -- if player.isGangShangKaiHua > 0 then
  421. -- str = str .. "杠上开花".." "
  422. -- end
  423. -- if player.isGangShangPao > 0 then
  424. -- str = str .. "杠上炮".." "
  425. -- end
  426. -- if player.isQiangGangHu > 0 then
  427. -- str = str .. "抢杠胡".." "
  428. -- end
  429. -- if player.isMenQing > 0 then
  430. -- str = str .. "门清".." "
  431. -- end
  432. -- if player.isZhongZhang > 0 then
  433. -- str = str .. "中张".." "
  434. -- end
  435. end
  436. if player.isJueZhang and player.isJueZhang > 0 then
  437. str = str .. "绝张+1".." "
  438. end
  439. if player.isSiJiao and player.isSiJiao > 0 then
  440. str = str .. "死叫" .. " "
  441. end
  442. if player.isBaoPai and player.isBaoPai == 1 then
  443. str = str.."报叫".." "
  444. end
  445. if player.isShaBao and player.isShaBao == 1 then
  446. str = str.."杀报".." "
  447. end
  448. local ganginfo = json.decode(roomInfo.ganginfo)
  449. if ganginfo then
  450. local showGang = ganginfo[tostring(userId)]
  451. if ganginfo and showGang then
  452. if showGang.agang and showGang.agang >0 then
  453. str = str.."暗杠x"..showGang.agang.." "
  454. end
  455. if showGang.mgang and showGang.mgang>0 then
  456. str = str.."明杠x"..showGang.mgang.." "
  457. end
  458. if showGang.bgang and showGang.bgang>0 then
  459. str = str.."巴杠x"..showGang.bgang.." "
  460. end
  461. if showGang.diangang_cnt and showGang.diangang_cnt>0 then
  462. str = str.."点杠x"..showGang.diangang_cnt.." "
  463. end
  464. if showGang.gsgang and showGang.gsgang>0 then
  465. str = str.."过手杠x"..showGang.gsgang.." "
  466. end
  467. --[[if ganginfo.gangCnt and ganginfo.gangCnt > 0 then
  468. str = str..ganginfo.gangCnt.."杠".." "
  469. end--]]
  470. end
  471. end
  472. end
  473. return str
  474. end
  475. --合并牌型得到最终的字符串
  476. function xueliuRoomXiaoJuView:getPaiTypeStr(player)
  477. local strTab = {}
  478. for k,v in pairs(MJDefine.MJGamePaiType) do
  479. local newType = self:_and(player.huType,v)
  480. if newType ~= 0 then
  481. table.insert(strTab,MJDefine.MJGameHuStr[newType] or "")
  482. end
  483. end
  484. if player.result > 0 or player.huType > 0 then
  485. if player.genCount > 0 then
  486. table.insert(strTab,player.genCount.."归")
  487. end
  488. end
  489. dump(strTab)
  490. --logD(table.toString(strTab))
  491. for _,v in pairs(MJDefine.MJGameHuMargeTab) do
  492. local list = v.tab
  493. local str = v.name
  494. dump(list)
  495. local indexs= {}
  496. for _,v in pairs(list) do
  497. local index = table.indexOf(strTab, v)
  498. if index~= -1 then
  499. table.insert(indexs,index)
  500. end
  501. end
  502. if #indexs == #list then --如果都找到则合并
  503. for k,v in pairs(list) do
  504. table.removeItem(strTab,v)
  505. end
  506. -- logD(str)
  507. table.insert(strTab,str)
  508. end
  509. end
  510. local info = ""
  511. for k,v in pairs(strTab) do
  512. info = info..v.." "
  513. end
  514. return info
  515. end
  516. function xueliuRoomXiaoJuView:createHandCards(layer,arg,seatId)
  517. for k,v in pairs(arg) do
  518. local mj
  519. if self.desktopType == MJDefine.DesktopType.TwoDL then
  520. mj=MJ:new(v.card,MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  521. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  522. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_PADDING_X
  523. else
  524. mj = CardClass:new(v.card, MJDefine.MyViewId, MJDefine.MJType.Stand, 10)
  525. mj:setScale(MJ_HANDCARD_SCALE)
  526. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  527. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_HANDCARD_PADDING_X
  528. end
  529. layer:addChild(mj)
  530. end
  531. end
  532. function xueliuRoomXiaoJuView:createHuCard(layer,card,seatId)
  533. local mj
  534. if self.desktopType == MJDefine.DesktopType.TwoDL then
  535. mj=MJ:new(card,MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  536. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  537. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_PADDING_X
  538. local flag = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_hu_flag.png")
  539. mj:addChild(flag)
  540. if self.desktopType == MJDefine.DesktopType.TwoDGold then
  541. flag:setPosition(cc.p(16,40))
  542. else
  543. flag:setPosition(cc.p(16,55))
  544. end
  545. else
  546. mj = CardClass:new(card, MJDefine.MyViewId, MJDefine.MJType.Stand, 10)
  547. mj:setScale(MJ_HANDCARD_SCALE)
  548. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  549. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_HANDCARD_PADDING_X
  550. local flag = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_hu_flag.png")
  551. mj:addChild(flag)
  552. flag:setScale(2)
  553. flag:setPosition(cc.p(32,82))
  554. end
  555. layer:addChild(mj)
  556. end
  557. function xueliuRoomXiaoJuView:createXueliuHuCard(layer,card,seatId)
  558. local mj
  559. if self.desktopType == MJDefine.DesktopType.TwoDL then
  560. mj=MJ:new(card,MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  561. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  562. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_PADDING_X
  563. local flag = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_hu_flag.png")
  564. mj:addChild(flag)
  565. if self.desktopType == MJDefine.DesktopType.TwoDGold then
  566. flag:setPosition(cc.p(16,40))
  567. else
  568. flag:setPosition(cc.p(16,55))
  569. end
  570. else
  571. mj = CardClass:new(card, MJDefine.MyViewId, MJDefine.MJType.Stand, 10)
  572. mj:setScale(MJ_HANDCARD_SCALE)
  573. mj:setPosition(cc.p(self.initX[seatId],MJ_HAND_CARD_INIT_Y))
  574. self.initX[seatId]=self.initX[seatId]+mj:getContentSize().width+MJ_HANDCARD_PADDING_X
  575. local flag = cc.Sprite:create("mj/res/ui/zy_fangjian/mj_hu_flag.png")
  576. mj:addChild(flag)
  577. flag:setScale(2)
  578. flag:setPosition(cc.p(32,82))
  579. end
  580. layer:addChild(mj)
  581. end
  582. function xueliuRoomXiaoJuView:createChi(values,redNum)
  583. local node=cc.Layer:create()--Color:create(cc.c4b(255,0,0,255))
  584. node:setAnchorPoint(cc.p(0.5,0.5))
  585. node:ignoreAnchorPointForPosition(false)
  586. local width=0
  587. local height=0
  588. for i=1,3 do
  589. if values[i] then
  590. local mj
  591. if self.desktopType == MJDefine.DesktopType.TwoDL then
  592. mj=MJ:new(values[i],MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  593. local mjWidth=mj:getContentSize().width
  594. local mjHeight=mj:getContentSize().height
  595. local x=mjWidth/2+(i-1)*(mjWidth+MJ_PADDING_X)
  596. local y=mjHeight/2
  597. width=width+mjWidth
  598. height=mjHeight
  599. mj:setPosition(x,y)
  600. else
  601. mj = CardClass:new(values[i], MJDefine.MyViewId, MJDefine.MJType.Operate, 10)
  602. mj:setScale(MJ_OPERATE_SCALE)
  603. local mjWidth=mj:getContentSize().width * MJ_OPERATE_SCALE
  604. local mjHeight=mj:getContentSize().height * MJ_OPERATE_SCALE
  605. local x=mjWidth/2+(i-1)*(mjWidth+MJ_OPERATE_PADDING_X)
  606. local y=mjHeight/2
  607. width=width+mjWidth
  608. height=mjHeight
  609. mj:setPosition(x,y)
  610. end
  611. node:addChild(mj)
  612. end
  613. end
  614. node:setContentSize(cc.size(width,height))
  615. return node
  616. end
  617. function xueliuRoomXiaoJuView:createGang(values,redNum,isBaGang)
  618. local node=cc.Layer:create()--Color:create(cc.c4b(255,0,0,255))
  619. node:setAnchorPoint(cc.p(0.5,0.5))
  620. node:ignoreAnchorPointForPosition(false)
  621. local width=0
  622. local height=0
  623. for i=1,4 do
  624. if values[i] then
  625. local mj
  626. if self.desktopType == MJDefine.DesktopType.TwoDL then
  627. mj=MJ:new(values[i],MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  628. if isBaGang and i == 4 then
  629. mj=MJ:new(0,MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  630. mj:setAutoSize(false)
  631. mj:setSize(cc.size(47,72))
  632. if self.desktopType == MJDefine.DesktopType.TwoDGold then
  633. mj:setSize(cc.size(36,55))
  634. end
  635. end
  636. local mjWidth=mj:getContentSize().width
  637. local mjHeight=mj:getContentSize().height
  638. local x=mjWidth/2+(i-1)*(mjWidth+MJ_PADDING_X)
  639. local y=mjHeight/2
  640. if i == 4 then
  641. mj:setLocalZOrder(2)
  642. y = mjHeight/2 + GANG_OFFSET_Y
  643. x = mjWidth/2 + (mjWidth+MJ_PADDING_X)
  644. else
  645. width = width + mjWidth
  646. end
  647. height=mjHeight
  648. mj:setPosition(x,y)
  649. else
  650. mj = CardClass:new(values[i], MJDefine.MyViewId, MJDefine.MJType.Operate, 10)
  651. mj:setScale(MJ_OPERATE_SCALE)
  652. if isBaGang and i == 4 then--血战巴杠朝上
  653. --mj:setOperateBackImage()
  654. end
  655. local mjWidth=mj:getContentSize().width * MJ_OPERATE_SCALE
  656. local mjHeight=mj:getContentSize().height * MJ_OPERATE_SCALE
  657. local x=mjWidth/2+(i-1)*(mjWidth+MJ_OPERATE_PADDING_X)
  658. local y=mjHeight/2
  659. --width=width+mjWidth
  660. if i == 4 then
  661. mj:setLocalZOrder(2)
  662. y = mjHeight/2 + GANG_OFFSET_Y
  663. x = mjWidth/2 + (mjWidth+MJ_OPERATE_PADDING_X)
  664. else
  665. width = width + mjWidth
  666. end
  667. height=mjHeight
  668. mj:setPosition(x,y)
  669. end
  670. node:addChild(mj)
  671. end
  672. end
  673. node:setContentSize(cc.size(width,height))
  674. return node
  675. end
  676. function xueliuRoomXiaoJuView:createAnGang(values,redNum)
  677. local node=cc.Layer:create()--Color:create(cc.c4b(255,0,0,255))
  678. node:setAnchorPoint(cc.p(0.5,0.5))
  679. node:ignoreAnchorPointForPosition(false)
  680. local width=0
  681. local height=0
  682. for i=1,4 do
  683. if values[i] then
  684. local mj
  685. if self.desktopType == MJDefine.DesktopType.TwoDL then
  686. if i <= 3 then
  687. mj=MJ:new(values[i],MJDefine.MJType.OutBlack,MJDefine.MyViewId,self.desktopType)
  688. mj:setAutoSize(false)
  689. mj:setSize(cc.size(47,72))
  690. if self.desktopType == MJDefine.DesktopType.TwoDGold then
  691. mj:setSize(cc.size(36,55))
  692. end
  693. else
  694. mj=MJ:new(values[i],MJDefine.MJType.Out,MJDefine.MyViewId,self.desktopType)
  695. end
  696. local mjWidth=mj:getContentSize().width
  697. local mjHeight=mj:getContentSize().height
  698. local x=mjWidth/2+(i-1)*(mjWidth+MJ_PADDING_X)
  699. local y=mjHeight/2
  700. if i == 4 then
  701. mj:setLocalZOrder(2)
  702. y = mjHeight/2 + GANG_OFFSET_Y
  703. x = mjWidth/2 + (mjWidth+MJ_PADDING_X)
  704. else
  705. width = width + mjWidth
  706. end
  707. height=mjHeight
  708. mj:setPosition(x,y)
  709. else
  710. mj = CardClass:new(values[i], MJDefine.MyViewId, MJDefine.MJType.Operate, 10)
  711. mj:setScale(MJ_OPERATE_SCALE)
  712. -- 暗杠盖牌
  713. if not IS_SHOW_ANGANG_CARD then
  714. if i <= 3 then
  715. mj:setOperateBackImage()
  716. end
  717. end
  718. local mjWidth=mj:getContentSize().width * MJ_OPERATE_SCALE
  719. local mjHeight=mj:getContentSize().height * MJ_OPERATE_SCALE
  720. if i <= 3 then
  721. local x=mjWidth/2+(i-1)*(mjWidth+MJ_OPERATE_PADDING_X)
  722. local y=mjHeight/2
  723. width=width+mjWidth
  724. height=mjHeight
  725. mj:setPosition(x,y)
  726. else
  727. local x=mjWidth/2+(2-1)*(mjWidth+MJ_OPERATE_PADDING_X) - 1
  728. local y=mjHeight/2 + 16
  729. height=mjHeight
  730. mj:setPosition(x, y);
  731. end
  732. end
  733. node:addChild(mj)
  734. end
  735. end
  736. node:setContentSize(cc.size(width,height))
  737. return node
  738. end
  739. function xueliuRoomXiaoJuView:createGroupCards(layer,arg,seatId)
  740. local handlers={
  741. [MJDefine.MJGroupType.Chi]=handler(self,self.createChi),
  742. [MJDefine.MJGroupType.Peng]=handler(self,self.createChi),
  743. [MJDefine.MJGroupType.Gang]=handler(self,self.createGang),
  744. [MJDefine.MJGroupType.AnGang]=handler(self,self.createAnGang),
  745. }
  746. for k,v in pairs(arg) do
  747. if handlers[v.opType] then
  748. local group
  749. if v.orgType == MJDefine.MJOperateType.OPREATE_BAGANG then
  750. group=handlers[v.opType](v.values,v.redNum,true)
  751. else
  752. group=handlers[v.opType](v.values,v.redNum)
  753. end
  754. --[[local posSpr
  755. if v.opType == MJDefine.MJGroupType.Gang then
  756. if v.fromUserId > 10000 then
  757. posSpr = self:createFromPos(v.fromUserId,seatId)
  758. posSpr:setPosition(cc.p(group:getContentSize().width/2-3,-5))
  759. else
  760. posSpr = self:createFromPos(nil,seatId)
  761. posSpr:setPosition(cc.p(group:getContentSize().width/2-25,-5))
  762. end
  763. elseif v.opType == MJDefine.MJGroupType.AnGang then
  764. posSpr = self:createFromPos(nil,seatId)
  765. posSpr:setPosition(cc.p(group:getContentSize().width/2-25,-5))
  766. end
  767. if posSpr then
  768. group:addChild(posSpr)
  769. end--]]
  770. local w=(group:getContentSize().width-MJ_WIDTH)/2
  771. group:setPosition(cc.p(self.initX[seatId]+w,MJ_OPERATE_CARD_INIT_Y))
  772. if k<#arg then
  773. self.initX[seatId]=self.initX[seatId]+group:getContentSize().width+MJ_GROUP_PADDING_X
  774. else
  775. self.initX[seatId]=self.initX[seatId]+group:getContentSize().width+MJ_GROUP_PADDING_X
  776. end
  777. layer:addChild(group)
  778. end
  779. end
  780. end
  781. function xueliuRoomXiaoJuView:createFromPos(formUid,seatId,posY)-- 来源uid 自己的seatId
  782. local mLayout = cc.Layout:createNode()
  783. if formUid then
  784. local nSeatId = app.room:getSeatIdByUserId(formUid)--app.room:getSeatIdByViewId(formUid)
  785. local spr = cc.ImageView:createNode()
  786. local posName = string.format("mj_xueliu/res/zy_fangjian/xzddadd/xzdd_xj_Pos_%d.png", nSeatId+1)
  787. spr:loadTexture(posName,0)
  788. local tSize = spr:getContentSize()
  789. mLayout:setSize(tSize)
  790. mLayout:addChild(spr)
  791. else
  792. local index = 1
  793. local maxNum = app.room.roomInfo.nMaxPlayCount or 4
  794. for i=1,maxNum do
  795. if i~=seatId then
  796. local spr = cc.ImageView:createNode()
  797. local posName = string.format("mj_xueliu/res/zy_fangjian/xzddadd/xzdd_xj_Pos_%d.png", i)
  798. spr:loadTexture(posName,0)
  799. local contenSize = spr:getContentSize()
  800. local offsetX = index == 1 and -20 or 20
  801. local tPos = cc.p(0 + (index-1)*40,0)
  802. if maxNum == 2 then--2人玩事,数字标识居中
  803. tPos = cc.p(20,0)
  804. end
  805. spr:setPosition(tPos)
  806. mLayout:addChild(spr)
  807. index = index + 1
  808. end
  809. end
  810. end
  811. return mLayout
  812. end
  813. -- 获取组合牌组
  814. function xueliuRoomXiaoJuView:getChangeGruopDatas(g,redNum)
  815. -- dump(g, "getChangeGruopDatas")
  816. local opType=MJDefine.MJOperateToGroupType[g.opType]
  817. local showType=MJDefine.MJOperateToGroupType[g.opType]
  818. local opCard=g.opCard
  819. local redNum = g.redNum or 0
  820. local fromViewId = nil
  821. local targetSeatId = g.targetSeatId--操作位置座位号
  822. local fromUserId = g.opUserId or g.fromUserId or 0 --触发操作玩家
  823. if fromUserId<=0 or targetSeatId==nil then
  824. else
  825. fromViewId = app.room:transPos( targetSeatId, app.room:getSeatIdByUserId(fromUserId))
  826. --判断是否是对面玩家,对面玩家的话要做一次翻转
  827. local opViewId = app.room:getViewIdBySeatId(targetSeatId)
  828. if opViewId == 2 then --对面
  829. if fromViewId==1 then fromViewId = 3
  830. elseif fromViewId==3 then fromViewId = 1 end
  831. end
  832. --三人玩只有上下家
  833. if app.room:getMaxPlayerCount()==3 and fromViewId==2 then fromViewId = 3 end
  834. if app.room:getMaxPlayerCount()==2 and fromViewId~=0 then
  835. if showType == MJDefine.MJGroupType.Peng then
  836. fromViewId = 2
  837. else
  838. fromViewId = 4
  839. end
  840. end
  841. end
  842. --组合一下牌
  843. local group={
  844. opType=opType,
  845. showType=showType,
  846. values={},
  847. opCard = opCard,
  848. redNum = redNum,
  849. orgType = g.opType,--原始的类型,如巴杠会归结为杠 但是他原始操作是巴杠
  850. fromViewId = fromViewId,
  851. fromUserId = fromUserId,
  852. }
  853. if MJDefine.MJGroupType.Chi==showType then
  854. elseif MJDefine.MJGroupType.Peng==showType then
  855. group.values={opCard,opCard,opCard}
  856. else
  857. group.values={opCard,opCard,opCard,opCard}
  858. end
  859. return group
  860. end
  861. function xueliuRoomXiaoJuView:initWeaveCard()
  862. local roomInfo=app.room.roomInfo
  863. self.initX={}
  864. for k,v in pairs(roomInfo.memberList) do
  865. local userId = app.room:getViewIdByUserId(v.nUserId)
  866. local nSeatId = app.room:getSeatIdByViewId(userId)
  867. local i = nSeatId+1
  868. local groups={}
  869. for _,group in pairs(v.gruoupCards) do
  870. table.insert(groups,self:getChangeGruopDatas(group))
  871. end
  872. local Layout_Card = self.items[i].Items.Layout_Card
  873. self.initX[i]=MJ_HAND_CARD_INIT_X
  874. self:createGroupCards(Layout_Card,groups,i)
  875. self.initX[i] = self.initX[i] + 10
  876. self:createHandCards(Layout_Card,v.handCards,i)
  877. --创建胡的牌
  878. --[[if v.huCard and v.huCard ~= 0 then
  879. self.initX[i]=self.initX[i]+MJ_HU_X
  880. self:createHuCard(self.items[i].Items.Layout_Player,v.huCard,i)
  881. end--]]
  882. -- 血流很多胡牌
  883. logD("lwq_xiaoju_hupaiinfo", table.tostring(v.hupaiInfo))
  884. self.initX[i] = self.initX[i] + 10
  885. if v.hupaiInfo and v.hupaiInfo ~= nil then
  886. for key,value in pairs (v.hupaiInfo) do
  887. logD("lwq_xiaoju_hupaiinfo111", key)
  888. self.initX[i]=self.initX[i]+MJ_HU_X
  889. self:createXueliuHuCard(Layout_Card,value.huCard,i)
  890. end
  891. end
  892. end
  893. end
  894. function xueliuRoomXiaoJuView:initOther()
  895. local roomInfo = app.room.roomInfo
  896. self.ui.Items.Text_Round:setText("局数:"..roomInfo.nGameStartCount..'/'..roomInfo.nTotalGameNum)
  897. --规则
  898. local ruleAll = MJWanFa.getWanFaInfo(roomInfo.strGameInfo)
  899. -- self.ui.Items.Text_Rule:setText(ruleAll)
  900. local item = self.ui.Items.Text_Rule:getCopied()
  901. item:setVisible(true)
  902. item:setText(ruleAll)
  903. self.ui.Items.ListView:addChild(item)
  904. self.ui.Items.ListView:hideAllBar()
  905. self.ui.Items.ListView:getInnerContainer():setAutoSize(true)
  906. self.ui.Items.ListView:requestDoLayout();
  907. self.ui.Items.ListView:doLayout();
  908. self.ui.Items.ListView:jumpToTop()
  909. --时间
  910. self.ui.Items.Text_Time:setText(os.date("%m-%d %X"))--(getTimeString())
  911. --房号
  912. self.ui.Items.Text_RoomNum:setText("房号:"..roomInfo.nShowTableId)
  913. if roomInfo.stopFlag==MJDefine.StopFlag.STOP_FLAG_HUANG_ZHUANG then
  914. self.ui.Items.ImageView_Title:loadTexture("xj_liuju.png",cc.TextureResType.plistType)
  915. end
  916. end
  917. function xueliuRoomXiaoJuView:d2b(arg)
  918. self.data32={}
  919. for i=1,32 do
  920. self.data32[i]=2^(32-i)
  921. end
  922. local tr={}
  923. for i=1,32 do
  924. if arg >= self.data32[i] then
  925. tr[i]=1
  926. arg=arg-self.data32[i]
  927. else
  928. tr[i]=0
  929. end
  930. end
  931. return tr
  932. end
  933. function xueliuRoomXiaoJuView:b2d(arg)
  934. local nr=0
  935. for i=1,32 do
  936. if arg[i] ==1 then
  937. nr=nr+2^(32-i)
  938. end
  939. end
  940. return nr
  941. end
  942. function xueliuRoomXiaoJuView:_and(a,b)
  943. local op1=self:d2b(a)
  944. local op2=self:d2b(b)
  945. local r={}
  946. for i=1,32 do
  947. if op1[i]==1 and op2[i]==1 then
  948. r[i]=1
  949. else
  950. r[i]=0
  951. end
  952. end
  953. local c = self:b2d(r)
  954. return c
  955. end
  956. --黄色麻将小局改成跟绿色麻将一样大
  957. function xueliuRoomXiaoJuView:changeMjSize(mj)
  958. if not mj then return end
  959. mj:setAutoSize(false)
  960. mj:setSize(cc.size(47,72))
  961. end
  962. return xueliuRoomXiaoJuView