CMD_Game_21201.js 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928
  1. CMD_GAME_21201 = new cc.Class({ //window.
  2. ctor:function () {
  3. //////////////////////////////////////////////////////////////////////////
  4. //公共宏定义
  5. //测试模式
  6. this.TMP_TEST = false;
  7. this.KIND_ID = 21201; //游戏 I D
  8. this.GAME_PLAYER = 4; //游戏人数
  9. this.MYSELF_VIEW_ID = 2;
  10. this.MAX_WEAVE = 5; //最大组合
  11. this.MAX_INDEX = 42; //最大索引
  12. this.MAX_COUNT = 17; //最大数目
  13. this.CARD_COUNT = 16;
  14. this.MAX_REPERTORY = 144; //最大库存
  15. this.HEAP_FULL_COUNT = 34; //堆立全牌
  16. this.MAX_RIGHT_COUNT = 1; //最大权位DWORD个数
  17. this.GAME_SCENE_FREE = 0; //等待开始
  18. this.GAME_SCENE_PLAY = 100; //游戏进行
  19. this.GAME_SCENE_DOUBLE = this.GAME_SCENE_PLAY+1; //加倍状态
  20. this.cbLianZhuangCount = 0;
  21. SERVER_RULES_GENERAL =0X00000010 ; //普通激情
  22. this.dwChiHuRightAdd = 0;
  23. //////////////////////////////////////////////////////////////////////////
  24. //逻辑掩码
  25. this.MASK_COLOR = 0xF0; //花色掩码
  26. this.MASK_VALUE = 0x0F; //数值掩码
  27. //////////////////////////////////////////////////////////////////////////
  28. //人数
  29. this.GAME_RULE_RENSHU_2 =0x00040000; //2人 18
  30. this.GAME_RULE_RENSHU_0 =0x00020000; //3人 17
  31. this.GAME_RULE_RENSHU_1 =0x00010000; //4人 16
  32. //局数
  33. this.GAME_RULE_JUSHU_2 =0x00080000; //局数8
  34. this.GAME_RULE_JUSHU_3 =0x00100000; //局数12
  35. this.GAME_RULE_JUSHU_4 =0x00200000; //局数16
  36. //////////////////////////////////////////////////////////////////////////
  37. // 游戏规则
  38. this.GAME_RULE_TUOGUAN_15 =0x00000001; //60秒 0
  39. this.GAME_RULE_TUOGUAN_30 =0x00000002; //90秒 1
  40. this.GAME_RULE_TUOGUAN_60 =0x00000004; //120秒 2
  41. this.GAME_RULE_TUOGUAN_NONE =0x00000008; //无托管 3
  42. this.GAME_RULE_RENSHU_LIMIT =0x00000010; //不可少人开局 4
  43. // this.GAME_RULE_JUSHU_1 =0x00000020; //局数4 5
  44. // this.GAME_RULE_JUSHU_2 =0x00000040; //局数8 6
  45. // this.GAME_RULE_JUSHU_3 =0x00000080; //局数12 7
  46. // this.GAME_RULE_JUSHU_4 =0x00000100; //局数16 8
  47. this.GAME_RULE_SP_6 =0x00000200; //庄家无台 9
  48. this.GAME_RULE_SP_7 =0x00000400; //红中玩法 10
  49. // this.GAME_RULE_RENSHU_0 =0x00000800; //3人 11
  50. // this.GAME_RULE_RENSHU_1 =0x00001000; //4人 12
  51. // this.GAME_RULE_RENSHU_2 =0x00002000; //2人 13
  52. this.GAME_RULE_SP_1 =0x00004000; //点炮胡 14
  53. this.GAME_RULE_SP_2 =0x00008000; //自摸胡 15
  54. this.GAME_RULE_SP_3 =0x00010000; //飘123 16
  55. this.GAME_RULE_SP_4 =0x00020000; //不下嘴 17
  56. this.GAME_RULE_SP_5 =0x00040000; //飘135 18
  57. this.GAME_RULE_SP_8 =0x00080000; //飘2 19
  58. this.GAME_RULE_SP_9 =0x00100000; //飘3 20
  59. this.GAME_RULE_SP_10 =0x00200000; //飘5 21
  60. this.GAME_RULE_SP_11 =0x00400000; //飘8 22
  61. this.GAME_RULE_SP_12 =0x00800000; //无红中加倍 23
  62. this.GAME_RULE_SP_13 =0x01000000; //起手四红中可胡 24
  63. this.GAME_RULE_SP_14 =0x02000000; //中途四红中可胡 25
  64. this.GAME_RULE_SP_15 =0x04000000; //台湾北部麻将 26
  65. this.GAME_RULE_SP_16 =0x08000000; //台湾南部麻将 27
  66. this.GAME_RULE_SP_17 =0x10000000; //呖咕呖咕 28
  67. this.GAME_RULE_SP_18 =0x20000000; //飞鸟 29
  68. this.GAME_RULE_SP_19 =0x40000000; //不抓鸟 30
  69. this.GAME_RULE_SP_20 =0x00000001; //服务器规则:AA付费
  70. this.m_dwGameRule = 0; //创建规则
  71. this.m_dwGameRuleArr = new Array(5); //创建规则
  72. this.g_GameLogic = null;
  73. this.g_GameEngine = null;
  74. this.m_cbMagicData=0;//混牌值
  75. this.m_AllCardItem = new Array();
  76. //////////////////////////////////////////////////////////////////////////
  77. //动作定义
  78. //动作标志
  79. this.WIK_NULL = 0x0000; //没有类型
  80. this.WIK_LEFT = 0x0001; //左吃类型
  81. this.WIK_CENTER = 0x0002; //中吃类型
  82. this.WIK_RIGHT = 0x0004; //右吃类型
  83. this.WIK_PENG = 0x0008; //碰牌类型
  84. this.WIK_GANG = 0x0010; //杠牌类型
  85. this.WIK_LISTEN = 0x0020; //吃牌类型
  86. this.WIK_CHI_HU = 0x0040; //吃胡类型
  87. this.WIK_FANG_PAO = 0x0080; //放炮类型
  88. this.WIK_GANG_FENG = 0x0100; //旋风杠
  89. this.WIK_CAI_ZFB = 0x0200; //旋风杠(中发白吃杠)
  90. this.WIK_ADD_ZFB = 0x0400; //旋风杠补杠
  91. this.WIK_DNJ = 0x0800; //东南鸡
  92. this.WIK_ADD_DNJ= 0x1000; //东南鸡补
  93. this.WIK_ADD_FENG= 0x2000; //旋风杠补杠
  94. this.WIK_GANG_BU = 0x4000; //杠补
  95. //胡牌定义
  96. this.CHR_NULL =0x00000000; //空权位
  97. this.CHR_MENQiNG =0x00000001; //门清
  98. this.CHR_PENG_PENG =0x00000002; //碰碰胡
  99. this.CHR_QI_DUI =0x00000004; //八对
  100. this.CHR_BAXIANGUOHAI =0x00000008; //八仙过海
  101. this.CHR_GANG_KAI =0x00000010; //杠上开花
  102. this.CHR_KUN_SI_SE =0x00000020; //混一色
  103. this.CHR_QING_YI_SE =0x00000040; //清一色
  104. this.CHR_QUAN_QIU_PAO =0x00000080; //全求
  105. this.CHR_DI_TING =0x00000100; //地听
  106. this.CHR_TIAN_TING =0x00000200; //天听
  107. this.CHR_SHAN_YUAN =0x00000400; //三元
  108. this.CHR_SHAN_YUAN_XIAO =0x00000800; //小三元
  109. this.CHR_XIAO_SI_XI =0x00001000; //小四喜
  110. this.CHR_HAI_DI =0x00002000; //海底捞
  111. this.CHR_GANG_PAO =0x00004000; //杠后炮
  112. this.CHR_QI_QIANG_YI =0x00008000; //七抢1
  113. this.CHR_QIANG_GANG =0x00010000; //抢杠
  114. this.CHR_DUN_TING =0x00020000; //独听
  115. this.CHR_ZI_SI_SE =0x00040000; //字一色
  116. this.CHR_SHAN_KAN =0x00080000; //三暗刻
  117. this.CHR_SI_KAN =0x00100000 //四暗刻
  118. this.CHR_WU_KAN =0x00200000 //五暗刻
  119. this.CHR_HUA_GANG =0x00400000 //花杠
  120. this.CHR_PING_HU =0x00800000 //平胡
  121. this.CHR_WU_KAN_NO =0x01000000 //无刻
  122. this.CHR_BANKER =0x02000000; //庄家
  123. this.CHR_CHI_HU =0x04000000; //放炮
  124. this.CHR_ZI_MO =0x08000000; //自摸
  125. this.CHR_MEN_FENG =0x10000000; //门风
  126. this.CHR_HUA_PAI =0x20000000; //hua pai
  127. this.CHR_LIAN_ZHUANG =0x40000000; //lian zhuang
  128. this.CHR_FENG_QUAN =0x80000000; //风圈
  129. this.CHR_DA_SI_XI =0x00000001; //大四喜ADD
  130. //Y 排列方式
  131. this.enYTop = 0; //上对齐
  132. this.enYCenter = 1; //中对齐
  133. this.enYBottom = 2; //下对齐
  134. //方向枚举
  135. this.Direction_North = 0; //北向
  136. this.Direction_West = 1; //西向
  137. this.Direction_South = 2; //南向
  138. this.Direction_East = 3; //东向
  139. this.HAND_TOP = 0;
  140. this.HAND_LEFT = 1;
  141. this.HAND_BOTTOM = 2;
  142. this.HAND_RIGHT = 3;
  143. //牌状态
  144. this.HAND_STATE_STAND = 0;//立牌
  145. this.HAND_STATE_SHOW = 1;//显示牌
  146. this.HAND_STATE_SHOW_BACK = 2;//显示牌背
  147. //普通杠牌,1张牌摞起来,全部显示
  148. this.GANG_THREE_SHOW = 0;
  149. //普通杠牌,1张牌摞起来,暗杠全部不显示
  150. this.GAME_THREE_BACK = 1;
  151. //普通杠牌,1张牌摞起来,暗杠自己能看到第三张牌
  152. this.GAME_THREE_BACK_SELF = 2;
  153. this.CARD_WIGTH = 86;
  154. this.CARD_HEIGHT = 122;
  155. //游戏定时器
  156. this.IDI_START_GAME = 200; //开始定时器
  157. this.IDI_OPERATE_CARD = 201; //操作定时器
  158. //游戏定时器
  159. this.TIME_START_GAME = 30; //开始定时器
  160. this.TIME_OPERATE_CARD = 30; //操作定时器
  161. this.TIME_OPERATE_CARD_15 = 15; //操作定时器
  162. this.TIME_OPERATE_CARD_30 = 30; //操作定时器
  163. this.TIME_OPERATE_CARD_60 = 60; //操作定时器
  164. this.ITEM_PROVIDE_DIR = 0;
  165. this.ITEM_PROVIDE_COLOR = 1;
  166. //////////////////////////////////////////////////////////////////////////
  167. //服务器命令结构
  168. this.SUB_S_GAME_START = 100; //游戏开始
  169. this.SUB_S_OUT_CARD = 101; //出牌命令
  170. this.SUB_S_SEND_CARD = 102; //发送扑克
  171. this.SUB_S_OPERATE_NOTIFY = 104; //操作提示
  172. this.SUB_S_OPERATE_RESULT = 105; //操作命令
  173. this.SUB_S_GAME_END = 106; //游戏结束
  174. this.SUB_S_TRUSTEE = 107; //用户托管
  175. this.SUB_S_NEXT_READY = 108; //下局准备
  176. this.SUB_S_LEAVE = 109;
  177. this.SUB_S_USER_DOUBLE =111; //用户加倍
  178. this.SUB_S_GAME_DOUBLE =112; //开始选刚
  179. this.SUB_S_TING =113; //听牌
  180. this.SUB_S_BANKER_CAN_OUT =114; //庄可以出牌
  181. this.SUB_S_REPLACE_CARD =117; //用户补牌
  182. this.SUB_S_OPERATE_TIMER =120; //别人有提示显示时间
  183. //刷新数据
  184. this.SUB_S_UPDATE_CARD= 200; //刷新操作牌
  185. //////////////////////////////////////////////////////////////////////////
  186. //客户端命令结构
  187. this.SUB_C_OUT_CARD = 1; //出牌命令
  188. this.SUB_C_OPERATE_CARD = 3; //操作扑克
  189. this.SUB_C_TRUSTEE = 4; //用户托管
  190. this.SUB_C_NEXT_READY = 5;
  191. this.SUB_C_LEAVE = 7;
  192. this.SUB_C_USER_DOUBLE= 8; //用户加倍
  193. this.SUB_C_REPLACE_CARD = 9; //用户补牌
  194. },
  195. setRule:function(dwServerRules, dwRuleArr ){
  196. this.m_dwGameRuleArr = dwRuleArr;
  197. this.m_dwServerRules = dwServerRules;
  198. // this.GAME_PLAYER = this.GetPlayerCount();
  199. },
  200. IsJiPai:function(cbCardData)
  201. {
  202. return false;
  203. },
  204. GetPlayerCount:function(dwRule){
  205. if(dwRule)
  206. {
  207. if (dwRule & this.GAME_RULE_RENSHU_2)
  208. return 2;
  209. if (dwRule & this.GAME_RULE_RENSHU_0)
  210. return 3;
  211. else if (dwRule & this.GAME_RULE_RENSHU_1)
  212. return 4;
  213. else
  214. return 4;
  215. }
  216. else
  217. {
  218. if (this.m_dwServerRules & this.GAME_RULE_RENSHU_2)
  219. return 2;
  220. if (this.m_dwServerRules & this.GAME_RULE_RENSHU_0)
  221. return 3;
  222. else if (this.m_dwServerRules & this.GAME_RULE_RENSHU_1)
  223. return 4;
  224. else
  225. return 4;
  226. }
  227. },
  228. //类型子项
  229. tagKindItem:function(){
  230. var Obj = new Object();
  231. Obj.wWeaveKind = 0; //组合类型
  232. Obj.cbCenterCard = 0; //中心扑克
  233. Obj.cbValidIndex = new Array(3); //实际扑克索引
  234. return Obj;
  235. },
  236. //组合子项
  237. tagWeaveItem:function(){
  238. var Obj = new Object();
  239. Obj.wWeaveKind = 0; //组合类型
  240. Obj.cbCenterCard = 0; //中心扑克
  241. Obj.cbPublicCard = 0; //公开标志
  242. Obj.wProvideUser = 0; //供应用户
  243. Obj.cbCardCount=0; //麻将数量
  244. Obj.cbCardData = new Array(4); //实际扑克
  245. Obj.cbExtraCount = new Array(4); //中发白数量
  246. Obj.cbIndex = -1; //补杠的下标
  247. return Obj;
  248. },
  249. //杠牌结果
  250. tagGangCardResult:function(){
  251. var Obj = new Object();
  252. Obj.cbCardCount = 0; //扑克数目
  253. Obj.cbCardData = new Array(this.MAX_WEAVE); //扑克数据r
  254. return Obj;
  255. },
  256. //分析子项
  257. tagAnalyseItem:function(){
  258. var Obj = new Object();
  259. Obj.cbCardEye = 0; //牌眼扑克
  260. Obj.wWeaveKind = new Array(this.MAX_WEAVE); //组合类型
  261. Obj.cbCenterCard = new Array(this.MAX_WEAVE); //中心扑克
  262. Obj.cbCardData = new Array(this.MAX_WEAVE); //实际扑克
  263. for(var i=0;i<this.MAX_WEAVE;++i)
  264. {
  265. Obj.cbCardData[i] = new Array(4);
  266. }
  267. return Obj;
  268. },
  269. //选择扑克信息
  270. tagSelectCardInfo:function(){
  271. var Obj = new Object();
  272. Obj.wActionMask = 0; //操作码
  273. Obj.cbCardCount = 0; //选择数目
  274. Obj.cbCardData = new Array(4); //选择牌
  275. for(var i=0;i<4;++i)
  276. {
  277. Obj.cbCardData[i] = 0;
  278. }
  279. return Obj;
  280. },
  281. //积分信息
  282. tagScoreInfo:function(){
  283. var Obj = new Object();
  284. Obj.cbCardCount = new Array();
  285. Obj.cbCardData = new Array();
  286. Obj.szUserName = new Array();
  287. for(var i=0;i<this.GAME_PLAYER;++i){
  288. Obj.cbCardData[i] = new Array();
  289. Obj.szUserName[i] = new Array();
  290. }
  291. Obj.wBankerUser = INVALID_CHAIR;
  292. Obj.wProvideUser = INVALID_CHAIR;
  293. Obj.cbProvideCard = 0;
  294. Obj.lGameScore = new Array();
  295. Obj.lGangScore = new Array();
  296. Obj.dwChiHuKind = new Array();
  297. Obj.dwChiHuRight = new Array();
  298. Obj.wLeftUser = INVALID_CHAIR;
  299. Obj.cbLZCount = new Array();
  300. Obj.cbHPCount = new Array();
  301. Obj.cbDPCount = new Array();
  302. Obj.cbZMCount = new Array();
  303. for(var i=0;i<this.GAME_PLAYER;++i){
  304. Obj.cbLZCount[i] = new Array();
  305. Obj.cbHPCount[i] = new Array();
  306. Obj.cbDPCount[i] = new Array();
  307. Obj.cbZMCount[i] = new Array();
  308. }
  309. return Obj;
  310. },
  311. tagWeaveInfo:function(){
  312. var Obj = new Object();
  313. Obj.cbWeaveCount = 0; //组合数目
  314. Obj.cbCardCount = new Array(); //扑克数目
  315. Obj.cbPublicWeave = new Array(); //公共组合
  316. Obj.cbCardData = new Array(); //组合扑克
  317. Obj.wWeaveKind = new Array();
  318. for(var i=0;i<this.MAX_WEAVE;++i){
  319. Obj.cbCardData[i] = new Array();
  320. }
  321. return Obj;
  322. },
  323. CMD_S_HandCardData:function()
  324. {
  325. var Obj = new Object();
  326. Obj.wChairID=0;
  327. Obj.wCardCount=0;
  328. Obj.wCurrentUser=0;
  329. Obj.cbSendCardData = 0;
  330. Obj.cbCardData = new Array(this.MAX_COUNT);
  331. Obj.WeaveItem = new Array(this.MAX_WEAVE);
  332. for (var j = 0; j < this.MAX_WEAVE; j++) {
  333. Obj.WeaveItem[j] = this.CMD_WeaveItem();
  334. }
  335. Obj.dwWeaveCount = 0;
  336. Obj.cbCantOutCard = new Array(2);
  337. return Obj;
  338. },
  339. //组合子项
  340. CMD_WeaveItem:function(){
  341. var Obj = new Object();
  342. Obj.wWeaveKind = 0;//组合类型
  343. Obj.cbCenterCard = 0; //中心扑克
  344. Obj.cbPublicCard = 0; //公开标志
  345. Obj.wProvideUser = 0; //供应用户
  346. Obj.cbCardCount=0; //麻将数量
  347. Obj.cbCardData = new Array(4);//组合数据
  348. Obj.cbExtraCount = new Array(4); //中发白数量
  349. Obj.cbIndex = -1; //补杠的下标
  350. return Obj;
  351. },
  352. //空闲状态
  353. CMD_S_StatusFree:function(){
  354. var Obj = new Object();
  355. Obj.lCellScore = 0;
  356. Obj.wBankerUser = INVALID_CHAIR; //庄家
  357. Obj.bTrustee = new Array(4); //是否托管
  358. Obj.bLeave = new Array(4); //是否离开
  359. Obj.cbDouble = new Array(4); //是否加倍(自由钢)
  360. Obj.dwOperateTime = 0; //操作时间
  361. Obj.wHuangZhuangCount = 0; //黄庄次数
  362. Obj.lSumGameScore = new Array(4);
  363. return Obj;
  364. },
  365. //刚
  366. CMD_S_Double:function(){
  367. var Obj = new Object();
  368. Obj.wCallUser=0; //加倍用户
  369. Obj.bStart=0; //开始游戏
  370. Obj.cbDouble=0; //是否加倍
  371. return Obj;
  372. },
  373. //开始加倍
  374. CMD_S_Game_Double:function()
  375. {
  376. var Obj = new Object();
  377. Obj.wBankerUser = INVALID_CHAIR; //庄家用户
  378. return Obj;
  379. },
  380. //游戏开始
  381. CMD_S_GameStart:function(){
  382. var Obj = new Object();
  383. Obj.wBankerUser = INVALID_CHAIR; //庄家用户
  384. Obj.wCurrentUser = INVALID_CHAIR; //当前用户
  385. Obj.wUserAction = 0; //用户动作
  386. Obj.cbCardData = new Array(this.MAX_COUNT); //扑克列表
  387. Obj.cbMakeMagicIndex=0; //定会牌索引值
  388. Obj.cbDouble = new Array(this.GAME_PLAYER);
  389. Obj.cbLastCardCount=0; //剩余牌数
  390. Obj.bTrustee = new Array(4); //是否托管
  391. Obj.wHuangZhuangCount = 0; //黄庄次数
  392. Obj.cbFlowerCount = new Array(this.GAME_PLAYER);
  393. Obj.cbCardDataFlower = new Array(this.GAME_PLAYER);
  394. for (var i = 0; i < this.GAME_PLAYER; i++) {
  395. Obj.cbCardDataFlower[i] = new Array(8);
  396. }
  397. Obj.cbSick = new Array(3);
  398. Obj.cbUserDNXB = new Array(4);
  399. Obj.cbQuan =0;
  400. Obj.cbFeng = 0;
  401. return Obj;
  402. },
  403. //发送扑克
  404. CMD_S_OutCard:function(){
  405. var Obj = new Object();
  406. Obj.wOutCardUser = INVALID_CHAIR; //出牌用户
  407. Obj.cbOutCardData = 0; //出牌扑克
  408. return Obj;
  409. },
  410. //补牌
  411. CMD_S_ReplaceCard: function() {
  412. var t = new Object();
  413. t.wReplaceUser = INVALID_CHAIR;
  414. t.cbReplaceCard = new Array(8);
  415. t.cbReplaceCount = 0;
  416. t.cbGameStart = 0;
  417. t.cbFlowerCount = new Array(this.GAME_PLAYER);
  418. t.cbCardDataFlower = new Array(this.GAME_PLAYER);
  419. for (var i = 0; i < this.GAME_PLAYER; i++) {
  420. t.cbCardDataFlower[i] = new Array(8);
  421. }
  422. return t;
  423. },
  424. //出牌命令
  425. CMD_S_SendCard:function(){
  426. var Obj = new Object();
  427. Obj.cbCardData = 0; //扑克数据
  428. Obj.wActionMask = 0; //动作掩码
  429. Obj.wCurrentUser = INVALID_CHAIR; //当前用户
  430. Obj.wSendCardUser = INVALID_CHAIR; //发牌用户
  431. Obj.cbLeftCardCount = 0; //剩余数目
  432. Obj.bFirstCard = false; //庄家第一张牌
  433. Obj.bCanOut = false; //是否可打牌
  434. return Obj;
  435. },
  436. CMD_TingTip:function(){
  437. var Obj = new Object();
  438. Obj.cbOutCardData = 0; //出牌数据
  439. Obj.cbHuCardData = 0; //胡牌数据
  440. Obj.cbDouble = 0; //翻数
  441. Obj.cbHaveCardCount = 0;//剩余数量
  442. return Obj;
  443. },
  444. //操作提示
  445. CMD_S_OperateNotify:function(){
  446. var Obj = new Object();
  447. Obj.wResumeUser = INVALID_CHAIR; //还原用户
  448. Obj.wActionMask = 0; //动作掩码
  449. Obj.cbActionCard = 0; //动作扑克
  450. Obj.wCount=0; //数量
  451. return Obj;
  452. },
  453. CMD_OperateItem:function(){
  454. var Obj = new Object();
  455. Obj.wActionMask=0; //操作类型
  456. Obj.cbCoreCardData=0; //核心扑克
  457. Obj.cbCardCount=0;
  458. Obj.cbCardData = new Array(4); //操作扑克
  459. return Obj;
  460. },
  461. //操作命令
  462. CMD_S_OperateResult:function(){
  463. var Obj = new Object();
  464. Obj.wOperateUser = INVALID_CHAIR; //操作用户
  465. Obj.wProvideUser = INVALID_CHAIR; //供应用户
  466. Obj.cbCenterCard = 0; //中心扑克
  467. Obj.wOperateCode = 0; //操作代码
  468. Obj.cbOperateCard = new Array(4); //操作扑克
  469. Obj.bBeiQiangGang = false; //被抢杠状态
  470. Obj.bQiangGang = false; //抢杠状态
  471. Obj.dwGangScore = 0; //杠分
  472. return Obj;
  473. },
  474. //游戏结束
  475. CMD_S_GameEnd:function(){
  476. var Obj = new Object();
  477. Obj.dwUserID = new Array(this.GAME_PLAYER); //胡牌类型
  478. Obj.lGameTax = 0; //游戏税收
  479. Obj.wProvideUser = INVALID_CHAIR; //供应用户
  480. Obj.cbProvideCard = 0; //供应扑克
  481. Obj.dwChiHuKind = new Array(this.GAME_PLAYER); //胡牌类型
  482. Obj.dwChiHuRight = new Array(this.GAME_PLAYER); //胡牌类型
  483. Obj.dwChiHuRightAdd = 0;
  484. Obj.cbWeaveCount = new Array(this.GAME_PLAYER);
  485. Obj.weaveItem = new Array(this.GAME_PLAYER);
  486. for (var i = 0; i < this.GAME_PLAYER; i++) {
  487. Obj.weaveItem[i] = new Array(this.MAX_WEAVE)
  488. for (var j = 0; j < this.MAX_WEAVE; j++) {
  489. Obj.weaveItem[i][j] = this.CMD_WeaveItem();
  490. }
  491. }
  492. Obj.lGameScore = new Array(this.GAME_PLAYER); //游戏积分
  493. Obj.lGangScore = new Array(this.GAME_PLAYER); //杠牌得分
  494. Obj.cbCardCount = new Array(this.GAME_PLAYER); //扑克数目
  495. Obj.cbCardData = new Array(this.GAME_PLAYER); //扑克数据
  496. for(var i =0;i<this.GAME_PLAYER;++i)
  497. {
  498. Obj.cbCardData[i]=new Array(this.MAX_COUNT);
  499. }
  500. Obj.wLeftUser = INVALID_CHAIR; //玩家逃跑
  501. Obj.lSumGameScore = new Array(this.GAME_PLAYER);
  502. Obj.wYear = 0;
  503. Obj.cbTime = new Array(this.GAME_PLAYER);
  504. Obj.wCostTime = 0;
  505. Obj.cbWinCount = new Array(this.GAME_PLAYER);
  506. Obj.cbLZCount = new Array(this.GAME_PLAYER);
  507. Obj.cbHPCount = new Array(this.GAME_PLAYER);
  508. Obj.cbDPCount = new Array(this.GAME_PLAYER);
  509. Obj.cbZMCount = new Array(this.GAME_PLAYER);
  510. Obj.cbDouble = new Array(this.GAME_PLAYER);
  511. Obj.cbMagicIndex = 0; //会牌索引
  512. Obj.cbLastCardData = new Array(this.GAME_PLAYER); //分张
  513. Obj.cbMingGangCount = new Array(this.GAME_PLAYER); //明杠
  514. Obj.cbAnGangCount = new Array(this.GAME_PLAYER); //暗杠
  515. Obj.bListen = new Array(this.GAME_PLAYER); //天听
  516. Obj.bWinner = new Array(this.GAME_PLAYER); //赢家
  517. Obj.cbBirdCard = new Array(6); //鸟牌
  518. Obj.cbBirdCardCount = 0; //抓鸟数
  519. Obj.wBirdCount = 0; //中鸟数
  520. Obj.cbWinner = INVALID_CHAIR; //赢家
  521. Obj.cbFlowerCount = new Array(this.GAME_PLAYER);
  522. Obj.cbCardDataFlower = new Array(this.GAME_PLAYER);
  523. for (var i = 0; i < this.GAME_PLAYER; i++) {
  524. Obj.cbCardDataFlower[i] = new Array(8);
  525. }
  526. Obj.cbSick = new Array(3);
  527. Obj.cbUserDNXB = new Array(4);
  528. Obj.cbQuan =0;
  529. Obj.cbFeng = 0;
  530. Obj.cbLianZhuangCount = 0;
  531. return Obj;
  532. },
  533. //大结算
  534. CMD_S_GameCustomInfo :function () {
  535. var Obj = new Object();
  536. Obj._name="CMD_S_GameCustomInfo"
  537. Obj.dwUserID = new Array(this.GAME_PLAYER);
  538. Obj.cbZiMoCount = new Array(this.GAME_PLAYER); //地主次数
  539. Obj.cbHuCount = new Array(this.GAME_PLAYER); //胡牌次数
  540. Obj.cbDianPaoCount = new Array(this.GAME_PLAYER); //点炮次数
  541. Obj.cbMGangCount = new Array(this.GAME_PLAYER); //明杠次数
  542. Obj.cbAGangCount = new Array(this.GAME_PLAYER); //暗杠次数
  543. Obj.lTotalScore = new Array(this.GAME_PLAYER); //游戏总分
  544. return Obj;
  545. },
  546. //游戏状态
  547. CMD_S_StatusPlay:function(){
  548. var Obj = new Object();
  549. Obj.lCellScore = 0; //单元积分
  550. Obj.wBankerUser = INVALID_CHAIR; //庄家
  551. Obj.wCurrentUser = INVALID_CHAIR; //当前玩家
  552. Obj.cbActionCard = 0; //动作扑克
  553. Obj.wActionMask = 0; //动作掩码
  554. Obj.cbLeftCardCount = 0; //剩余牌数
  555. Obj.bTrustee = new Array(this.GAME_PLAYER);//是否托管
  556. Obj.wOutCardUser = INVALID_CHAIR; //出牌用户
  557. Obj.cbOutCardData = 0; //出牌扑克
  558. Obj.cbDiscardCount = new Array(this.GAME_PLAYER);//丢弃数目
  559. Obj.cbDiscardCard = new Array(this.GAME_PLAYER);
  560. for (var i = 0; i < this.GAME_PLAYER; i++) {
  561. Obj.cbDiscardCard[i] = new Array(60);
  562. }
  563. Obj.cbCardCount = 0; //扑克数目
  564. Obj.cbCardData = new Array(this.MAX_COUNT); //扑克列表
  565. Obj.cbSendCardData = 0; //发送扑克
  566. Obj.cbWeaveCount = new Array(this.GAME_PLAYER);
  567. Obj.weaveItem = new Array(this.GAME_PLAYER);
  568. for (var i = 0; i < this.GAME_PLAYER; i++) {
  569. Obj.weaveItem[i] = new Array(this.MAX_WEAVE)
  570. for (var j = 0; j < this.MAX_WEAVE; j++) {
  571. Obj.weaveItem[i][j] = this.CMD_WeaveItem();
  572. }
  573. }
  574. Obj.bLeave = new Array(this.GAME_PLAYER); //是否离开
  575. Obj.cbMakeMagicIndex=0; //定会牌索引值
  576. Obj.cbDouble = new Array(this.GAME_PLAYER); //是否加倍(自由钢)
  577. Obj.bListen = new Array(this.GAME_PLAYER); //听牌
  578. Obj.cbCantOutCard = new Array(2); //不能吃付打付
  579. Obj.dwOperateTime = 0; //操作时间
  580. Obj.wHuangZhuangCount = 0; //黄庄次数
  581. Obj.bCanOutCard = false; //是否可出牌
  582. Obj.lGangScore = new Array(this.GAME_PLAYER); //杠分
  583. Obj.cbFlowerCount = new Array(this.GAME_PLAYER);
  584. Obj.cbCardDataFlower = new Array(this.GAME_PLAYER);
  585. for (var i = 0; i < this.GAME_PLAYER; i++) {
  586. Obj.cbCardDataFlower[i] = new Array(8);
  587. }
  588. Obj.cbSick = new Array(3);
  589. Obj.cbUserDNXB = new Array(4);
  590. Obj.cbQuan =0;
  591. Obj.cbFeng = 0;
  592. Obj.lSumGameScore = new Array(4);
  593. return Obj;
  594. },
  595. //用户托管
  596. CMD_S_Trustee:function(){
  597. var Obj = new Object();
  598. Obj.bTrustee = false; //是否托管
  599. Obj.wChairID = INVALID_CHAIR; //托管用户
  600. return Obj;
  601. },
  602. //用户离开
  603. CMD_S_Leave:function(){
  604. var Obj = new Object();
  605. Obj.bLeave = new Array(this.GAME_PLAYER); //是否离开
  606. for(var i = 0; i < this.GAME_PLAYER; ++ i) Obj.bLeave[i] = false;
  607. return Obj;
  608. },
  609. //下局准备
  610. CMD_S_NextReady:function(){
  611. var Obj = new Object();
  612. Obj.cbNextReadyStatus = new Array(this.GAME_PLAYER); //准备状态
  613. Obj.bNextReadyStatus = new Array(this.GAME_PLAYER);
  614. return Obj;
  615. },
  616. //用户离开
  617. //补牌
  618. CMD_C_ReplaceCard: function() {
  619. var Obj = new Object();
  620. Obj.isGameStart = 0;
  621. Obj.cbCardCount = 0;
  622. Obj.cbCardData = new Array(8);
  623. return Obj;
  624. },
  625. CMD_C_ReplaceCard4: function() {
  626. var Obj = new Object();
  627. Obj.cbCardData = new Array(8);
  628. Obj.cbGameStart = 0;
  629. Obj.cbCardCount = 0;
  630. return Obj;
  631. },
  632. //出牌命令
  633. CMD_C_OutCard:function(){
  634. var Obj = new Object();
  635. Obj.cbCardData = 0; //扑克数据
  636. Obj.bAddGang = false; //是否是补扭
  637. return Obj;
  638. },
  639. //操作命令
  640. CMD_C_OperateCard:function(){
  641. var Obj = new Object();
  642. Obj.wOperateCode = 0; //操作代码
  643. Obj.cbOperateCount = 0; //操作代码
  644. Obj.cbOperateCard = new Array(4); //操作扑克
  645. Obj.cbIndex = -1; //补杠的下标
  646. return Obj;
  647. },
  648. //用户托管
  649. CMD_C_Trustee:function(){
  650. var Obj = new Object();
  651. Obj.bTrustee = 0; //扑克数据
  652. return Obj;
  653. },
  654. //用户离开
  655. CMD_C_Leave:function(){
  656. var Obj = new Object();
  657. this.bLeave = false; //是否离开
  658. return Obj;
  659. },
  660. //加倍命令
  661. CMD_C_Double:function() {
  662. var Obj = new Object();
  663. Obj.cbDouble=0; //255不加,1加1, 2加2
  664. return Obj;
  665. },
  666. GetProgress:function(wProgress,rules){
  667. var cnt=this.GetGameCount(rules);
  668. value = '第' + wProgress + '/' + cnt + '圈';
  669. return value;
  670. },
  671. GameMaxPlayerCount:function(rules){
  672. return this.GAME_PLAYER;
  673. },
  674. GetGameCount:function(rules){
  675. //if (rules & this.GAME_RULE_JUSHU_1 ) return 4;
  676. if (rules & this.GAME_RULE_JUSHU_2 ) return 1;
  677. if (rules & this.GAME_RULE_JUSHU_3 ) return 2;
  678. if (rules & this.GAME_RULE_JUSHU_4 ) return 3;
  679. return 8;
  680. },
  681. //是否是局数
  682. IsPlayJu:function(rules){
  683. return true;
  684. },
  685. GetRulesStr:function(dwServerRules,dwRulesArr){
  686. console.log("dwServerRules:",dwServerRules);
  687. console.log("dwRulesArr:",dwRulesArr);
  688. var cstr = "";
  689. if (dwServerRules & this.GAME_RULE_SP_20) {
  690. cstr += " AA付費 ";
  691. }else{
  692. cstr += " 房主付費 ";
  693. }
  694. if (dwRulesArr[0] & this.GAME_RULE_SP_15) cstr += "台灣北部麻將";
  695. if (dwRulesArr[0] & this.GAME_RULE_SP_16) cstr += "台灣南部麻將";
  696. if (dwRulesArr[0] & this.GAME_RULE_SP_6) cstr += " 莊家無台";
  697. if (dwRulesArr[0] & this.GAME_RULE_SP_17) cstr += " 嚦咕嚦咕";
  698. cstr +=" "+this.GetGameCount(dwServerRules)+"圈";
  699. if (dwServerRules & this.GAME_RULE_RENSHU_2) cstr += " 2人";
  700. if (dwServerRules & this.GAME_RULE_RENSHU_0) cstr += " 3人";
  701. if (dwServerRules & this.GAME_RULE_RENSHU_1) cstr += " 4人";
  702. if (dwRulesArr[0] & this.GAME_RULE_TUOGUAN_15) cstr += " 15秒";
  703. if (dwRulesArr[0] & this.GAME_RULE_TUOGUAN_30) cstr += " 30秒";
  704. if (dwRulesArr[0] & this.GAME_RULE_TUOGUAN_60) cstr += " 60秒";
  705. if (dwRulesArr[0] & this.GAME_RULE_TUOGUAN_NONE) cstr += " 無託管";
  706. if (dwRulesArr[1]) {
  707. cstr += ` 底分${dwRulesArr[1]}`;
  708. }
  709. if (dwRulesArr[2]) {
  710. cstr += ` 台数${dwRulesArr[2]}`;
  711. }
  712. // if (dwRulesArr[0] & this.GAME_RULE_RENSHU_LIMIT) cstr += " 不可少人";
  713. // if (dwRulesArr[0] & this.GAME_RULE_SP_3) cstr += " 飘123";
  714. // if (dwRulesArr[0] & this.GAME_RULE_SP_4) cstr += " 不飘";
  715. // if (dwRulesArr[0] & this.GAME_RULE_SP_5) cstr += " 飘135";
  716. // if (dwRulesArr[0] & this.GAME_RULE_SP_8) cstr += " 飘2";
  717. // if (dwRulesArr[0] & this.GAME_RULE_SP_9) cstr += " 飘3";
  718. // if (dwRulesArr[0] & this.GAME_RULE_SP_10) cstr += " 飘5";
  719. // if (dwRulesArr[0] & this.GAME_RULE_SP_11) cstr += " 飘8";
  720. // if (dwRulesArr[0] & this.GAME_RULE_SP_1) cstr += " 点炮胡";
  721. // if (dwRulesArr[0] & this.GAME_RULE_SP_2) cstr += " 自摸胡";
  722. // if (dwRulesArr[0] & this.GAME_RULE_SP_6) cstr += " 大胡";
  723. // if (dwRulesArr[0] & this.GAME_RULE_SP_7) cstr += " 红中玩法";
  724. // if (dwRulesArr[0] & this.GAME_RULE_SP_12) cstr += " 红中加倍";
  725. // if (dwRulesArr[0] & this.GAME_RULE_SP_13) cstr += " 起手四红中可胡";
  726. // if (dwRulesArr[0] & this.GAME_RULE_SP_14) cstr += " 中途四红中可胡";
  727. // if (dwRulesArr[0] & this.GAME_RULE_SP_15) cstr += " 抓2鸟";
  728. // if (dwRulesArr[0] & this.GAME_RULE_SP_16) cstr += " 抓4鸟";
  729. // if (dwRulesArr[0] & this.GAME_RULE_SP_17) cstr += " 抓6鸟";
  730. // if (dwRulesArr[0] & this.GAME_RULE_SP_18) cstr += " 飞鸟";
  731. // if (dwRulesArr[0] & this.GAME_RULE_SP_19) cstr += " 不抓鸟";
  732. return cstr;
  733. },
  734. GetTrusteeString:function(rules){
  735. var str = '';
  736. if (rules & this.GAME_RULE_TUOGUAN_15 ) str+=' 15秒'
  737. if (rules & this.GAME_RULE_TUOGUAN_30 ) str+=' 30秒'
  738. if (rules & this.GAME_RULE_TUOGUAN_60 ) str+=' 60秒'
  739. if (rules & this.GAME_RULE_TUOGUAN_NONE ) str+=' 無'
  740. //if (rules & this.GAME_RULE_MAGIC ) str+=' 混牌'
  741. return str;
  742. },
  743. GetHuRightString:function(rules,HuKind){
  744. var str ='';
  745. if ((rules & this.CHR_MENQiNG)&& (rules & this.CHR_ZI_MO) ){
  746. str+=' 門清自摸';
  747. } else{
  748. if (rules & this.CHR_MENQiNG ) str+=' 門清';
  749. if (rules & this.CHR_ZI_MO ) str+=' 自摸';
  750. }
  751. if (rules & this.CHR_PENG_PENG ) str+=' 碰碰胡';
  752. if (rules & this.CHR_QI_DUI ) str+=' 嚦咕嚦咕';
  753. if (rules & this.CHR_BAXIANGUOHAI ) str+=' 八仙過海';
  754. if (rules & this.CHR_GANG_KAI ) str+=' 杠上開花';
  755. if (rules & this.CHR_KUN_SI_SE ) str+=' 混一色';
  756. if (rules & this.CHR_QING_YI_SE ) str+=' 清一色';
  757. if (rules & this.CHR_QUAN_QIU_PAO ) str+=' 全求';
  758. if (rules & this.CHR_DI_TING ) str+=' 地聽';
  759. if (rules & this.CHR_TIAN_TING ) str+=' 天聽';
  760. if (rules & this.CHR_SHAN_YUAN ) str+=' 三元';
  761. if (rules & this.CHR_SHAN_YUAN_XIAO ) str+=' 小三元';
  762. if (rules & this.CHR_XIAO_SI_XI ) str+=' 小四喜';
  763. if (rules & this.CHR_HAI_DI ) str+=' 海底撈';
  764. if (rules & this.CHR_GANG_PAO ) str+=' 大三元';
  765. if (rules & this.CHR_QI_QIANG_YI ) str+=' 7抢1';
  766. if (rules & this.CHR_QIANG_GANG ) str+=' 搶杠胡';
  767. if (rules & this.CHR_DUN_TING ) str+=' 獨聽';
  768. if (rules & this.CHR_ZI_SI_SE ) str+=' 字一色';
  769. if (rules & this.CHR_SHAN_KAN ) str+=' 三暗刻';
  770. if (rules & this.CHR_SI_KAN ) str+=' 四暗刻';
  771. if (rules & this.CHR_WU_KAN ) str+=' 五暗刻';
  772. if (rules & this.CHR_HUA_GANG ) str+=' 花杠';
  773. if (rules & this.CHR_PING_HU ) str+=' 平胡';
  774. //if (rules & this.CHR_CHI_HU ) str+=' 放炮';
  775. if ((rules & this.CHR_MEN_FENG) && (GameDef.m_dwGameRuleArr[0] & GameDef.GAME_RULE_SP_16) ) str+=' 風台';
  776. if ((rules & this.CHR_MEN_FENG) && (GameDef.m_dwGameRuleArr[0] & GameDef.GAME_RULE_SP_15) ) str+=' 門風';
  777. if (rules & this.CHR_HUA_PAI ) str+=' 花牌';
  778. if (rules & this.CHR_FENG_QUAN ) str+=' 風圈';
  779. if (this.dwChiHuRightAdd & this.CHR_DA_SI_XI && HuKind & this.WIK_CHI_HU ) str+=' 大四喜';
  780. if(rules & this.CHR_LIAN_ZHUANG&&GameDef.cbLianZhuangCount>0){
  781. str+=' 連'+GameDef.cbLianZhuangCount+"拉"+GameDef.cbLianZhuangCount
  782. }else{
  783. if (rules & this.CHR_BANKER&&GameDef.cbLianZhuangCount==0) str+=' 莊家';
  784. }
  785. return str;
  786. },
  787. IsNoCheat:function(rules){
  788. if(rules & SERVER_RULES_GENERAL)
  789. {
  790. return false;
  791. }
  792. return true;
  793. },
  794. });
  795. GameDef = null;