CMD_Game_21201.js 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933
  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. console.log("游戏规则", this.m_dwGameRuleArr)
  199. // this.GAME_PLAYER = this.GetPlayerCount();
  200. },
  201. IsJiPai: function (cbCardData) {
  202. return false;
  203. },
  204. getGameFieldName: function () {
  205. if (this.m_dwGameRuleArr[3] == 1000) {
  206. return "新手場";
  207. } else if (this.m_dwGameRuleArr[3] == 2000) {
  208. return "初級場";
  209. } else if (this.m_dwGameRuleArr[3] == 10000) {
  210. return "中級場";
  211. } else if (this.m_dwGameRuleArr[3] == 15000) {
  212. return "高级场";
  213. } else if (this.m_dwGameRuleArr[3] == 30000) {
  214. return "大師場";
  215. }
  216. },
  217. GetPlayerCount: function (dwRule) {
  218. if (dwRule) {
  219. if (dwRule & this.GAME_RULE_RENSHU_2)
  220. return 2;
  221. if (dwRule & this.GAME_RULE_RENSHU_0)
  222. return 3;
  223. else if (dwRule & this.GAME_RULE_RENSHU_1)
  224. return 4;
  225. else
  226. return 4;
  227. }
  228. else {
  229. if (this.m_dwServerRules & this.GAME_RULE_RENSHU_2)
  230. return 2;
  231. if (this.m_dwServerRules & this.GAME_RULE_RENSHU_0)
  232. return 3;
  233. else if (this.m_dwServerRules & this.GAME_RULE_RENSHU_1)
  234. return 4;
  235. else
  236. return 4;
  237. }
  238. },
  239. //类型子项
  240. tagKindItem: function () {
  241. var Obj = new Object();
  242. Obj.wWeaveKind = 0; //组合类型
  243. Obj.cbCenterCard = 0; //中心扑克
  244. Obj.cbValidIndex = new Array(3); //实际扑克索引
  245. return Obj;
  246. },
  247. //组合子项
  248. tagWeaveItem: function () {
  249. var Obj = new Object();
  250. Obj.wWeaveKind = 0; //组合类型
  251. Obj.cbCenterCard = 0; //中心扑克
  252. Obj.cbPublicCard = 0; //公开标志
  253. Obj.wProvideUser = 0; //供应用户
  254. Obj.cbCardCount = 0; //麻将数量
  255. Obj.cbCardData = new Array(4); //实际扑克
  256. Obj.cbExtraCount = new Array(4); //中发白数量
  257. Obj.cbIndex = -1; //补杠的下标
  258. return Obj;
  259. },
  260. //杠牌结果
  261. tagGangCardResult: function () {
  262. var Obj = new Object();
  263. Obj.cbCardCount = 0; //扑克数目
  264. Obj.cbCardData = new Array(this.MAX_WEAVE); //扑克数据r
  265. return Obj;
  266. },
  267. //分析子项
  268. tagAnalyseItem: function () {
  269. var Obj = new Object();
  270. Obj.cbCardEye = 0; //牌眼扑克
  271. Obj.wWeaveKind = new Array(this.MAX_WEAVE); //组合类型
  272. Obj.cbCenterCard = new Array(this.MAX_WEAVE); //中心扑克
  273. Obj.cbCardData = new Array(this.MAX_WEAVE); //实际扑克
  274. for (var i = 0; i < this.MAX_WEAVE; ++i) {
  275. Obj.cbCardData[i] = new Array(4);
  276. }
  277. return Obj;
  278. },
  279. //选择扑克信息
  280. tagSelectCardInfo: function () {
  281. var Obj = new Object();
  282. Obj.wActionMask = 0; //操作码
  283. Obj.cbCardCount = 0; //选择数目
  284. Obj.cbCardData = new Array(4); //选择牌
  285. for (var i = 0; i < 4; ++i) {
  286. Obj.cbCardData[i] = 0;
  287. }
  288. return Obj;
  289. },
  290. //积分信息
  291. tagScoreInfo: function () {
  292. var Obj = new Object();
  293. Obj.cbCardCount = new Array();
  294. Obj.cbCardData = new Array();
  295. Obj.szUserName = new Array();
  296. for (var i = 0; i < this.GAME_PLAYER; ++i) {
  297. Obj.cbCardData[i] = new Array();
  298. Obj.szUserName[i] = new Array();
  299. }
  300. Obj.wBankerUser = INVALID_CHAIR;
  301. Obj.wProvideUser = INVALID_CHAIR;
  302. Obj.cbProvideCard = 0;
  303. Obj.lGameScore = new Array();
  304. Obj.lGangScore = new Array();
  305. Obj.dwChiHuKind = new Array();
  306. Obj.dwChiHuRight = new Array();
  307. Obj.wLeftUser = INVALID_CHAIR;
  308. Obj.cbLZCount = new Array();
  309. Obj.cbHPCount = new Array();
  310. Obj.cbDPCount = new Array();
  311. Obj.cbZMCount = new Array();
  312. for (var i = 0; i < this.GAME_PLAYER; ++i) {
  313. Obj.cbLZCount[i] = new Array();
  314. Obj.cbHPCount[i] = new Array();
  315. Obj.cbDPCount[i] = new Array();
  316. Obj.cbZMCount[i] = new Array();
  317. }
  318. return Obj;
  319. },
  320. tagWeaveInfo: function () {
  321. var Obj = new Object();
  322. Obj.cbWeaveCount = 0; //组合数目
  323. Obj.cbCardCount = new Array(); //扑克数目
  324. Obj.cbPublicWeave = new Array(); //公共组合
  325. Obj.cbCardData = new Array(); //组合扑克
  326. Obj.wWeaveKind = new Array();
  327. for (var i = 0; i < this.MAX_WEAVE; ++i) {
  328. Obj.cbCardData[i] = new Array();
  329. }
  330. return Obj;
  331. },
  332. CMD_S_HandCardData: function () {
  333. var Obj = new Object();
  334. Obj.wChairID = 0;
  335. Obj.wCardCount = 0;
  336. Obj.wCurrentUser = 0;
  337. Obj.cbSendCardData = 0;
  338. Obj.cbCardData = new Array(this.MAX_COUNT);
  339. Obj.WeaveItem = new Array(this.MAX_WEAVE);
  340. for (var j = 0; j < this.MAX_WEAVE; j++) {
  341. Obj.WeaveItem[j] = this.CMD_WeaveItem();
  342. }
  343. Obj.dwWeaveCount = 0;
  344. Obj.cbCantOutCard = new Array(2);
  345. return Obj;
  346. },
  347. //组合子项
  348. CMD_WeaveItem: function () {
  349. var Obj = new Object();
  350. Obj.wWeaveKind = 0;//组合类型
  351. Obj.cbCenterCard = 0; //中心扑克
  352. Obj.cbPublicCard = 0; //公开标志
  353. Obj.wProvideUser = 0; //供应用户
  354. Obj.cbCardCount = 0; //麻将数量
  355. Obj.cbCardData = new Array(4);//组合数据
  356. Obj.cbExtraCount = new Array(4); //中发白数量
  357. Obj.cbIndex = -1; //补杠的下标
  358. return Obj;
  359. },
  360. //空闲状态
  361. CMD_S_StatusFree: function () {
  362. var Obj = new Object();
  363. Obj.lCellScore = 0;
  364. Obj.wBankerUser = INVALID_CHAIR; //庄家
  365. Obj.bTrustee = new Array(4); //是否托管
  366. Obj.bLeave = new Array(4); //是否离开
  367. Obj.cbDouble = new Array(4); //是否加倍(自由钢)
  368. Obj.dwOperateTime = 0; //操作时间
  369. Obj.wHuangZhuangCount = 0; //黄庄次数
  370. Obj.lSumGameScore = new Array(4);
  371. return Obj;
  372. },
  373. //刚
  374. CMD_S_Double: function () {
  375. var Obj = new Object();
  376. Obj.wCallUser = 0; //加倍用户
  377. Obj.bStart = 0; //开始游戏
  378. Obj.cbDouble = 0; //是否加倍
  379. return Obj;
  380. },
  381. //开始加倍
  382. CMD_S_Game_Double: function () {
  383. var Obj = new Object();
  384. Obj.wBankerUser = INVALID_CHAIR; //庄家用户
  385. return Obj;
  386. },
  387. //游戏开始
  388. CMD_S_GameStart: function () {
  389. var Obj = new Object();
  390. Obj.wBankerUser = INVALID_CHAIR; //庄家用户
  391. Obj.wCurrentUser = INVALID_CHAIR; //当前用户
  392. Obj.wUserAction = 0; //用户动作
  393. Obj.cbCardData = new Array(this.MAX_COUNT); //扑克列表
  394. Obj.cbMakeMagicIndex = 0; //定会牌索引值
  395. Obj.cbDouble = new Array(this.GAME_PLAYER);
  396. Obj.cbLastCardCount = 0; //剩余牌数
  397. Obj.bTrustee = new Array(4); //是否托管
  398. Obj.wHuangZhuangCount = 0; //黄庄次数
  399. Obj.cbFlowerCount = new Array(this.GAME_PLAYER);
  400. Obj.cbCardDataFlower = new Array(this.GAME_PLAYER);
  401. for (var i = 0; i < this.GAME_PLAYER; i++) {
  402. Obj.cbCardDataFlower[i] = new Array(8);
  403. }
  404. Obj.cbSick = new Array(3);
  405. Obj.cbUserDNXB = new Array(4);
  406. Obj.cbQuan = 0;
  407. Obj.cbFeng = 0;
  408. return Obj;
  409. },
  410. //发送扑克
  411. CMD_S_OutCard: function () {
  412. var Obj = new Object();
  413. Obj.wOutCardUser = INVALID_CHAIR; //出牌用户
  414. Obj.cbOutCardData = 0; //出牌扑克
  415. return Obj;
  416. },
  417. //补牌
  418. CMD_S_ReplaceCard: function () {
  419. var t = new Object();
  420. t.wReplaceUser = INVALID_CHAIR;
  421. t.cbReplaceCard = new Array(8);
  422. t.cbReplaceCount = 0;
  423. t.cbGameStart = 0;
  424. t.cbFlowerCount = new Array(this.GAME_PLAYER);
  425. t.cbCardDataFlower = new Array(this.GAME_PLAYER);
  426. for (var i = 0; i < this.GAME_PLAYER; i++) {
  427. t.cbCardDataFlower[i] = new Array(8);
  428. }
  429. return t;
  430. },
  431. //出牌命令
  432. CMD_S_SendCard: function () {
  433. var Obj = new Object();
  434. Obj.cbCardData = 0; //扑克数据
  435. Obj.wActionMask = 0; //动作掩码
  436. Obj.wCurrentUser = INVALID_CHAIR; //当前用户
  437. Obj.wSendCardUser = INVALID_CHAIR; //发牌用户
  438. Obj.cbLeftCardCount = 0; //剩余数目
  439. Obj.bFirstCard = false; //庄家第一张牌
  440. Obj.bCanOut = false; //是否可打牌
  441. return Obj;
  442. },
  443. CMD_TingTip: function () {
  444. var Obj = new Object();
  445. Obj.cbOutCardData = 0; //出牌数据
  446. Obj.cbHuCardData = 0; //胡牌数据
  447. Obj.cbDouble = 0; //翻数
  448. Obj.cbHaveCardCount = 0;//剩余数量
  449. return Obj;
  450. },
  451. //操作提示
  452. CMD_S_OperateNotify: function () {
  453. var Obj = new Object();
  454. Obj.wResumeUser = INVALID_CHAIR; //还原用户
  455. Obj.wActionMask = 0; //动作掩码
  456. Obj.cbActionCard = 0; //动作扑克
  457. Obj.wCount = 0; //数量
  458. return Obj;
  459. },
  460. CMD_OperateItem: function () {
  461. var Obj = new Object();
  462. Obj.wActionMask = 0; //操作类型
  463. Obj.cbCoreCardData = 0; //核心扑克
  464. Obj.cbCardCount = 0;
  465. Obj.cbCardData = new Array(4); //操作扑克
  466. return Obj;
  467. },
  468. //操作命令
  469. CMD_S_OperateResult: function () {
  470. var Obj = new Object();
  471. Obj.wOperateUser = INVALID_CHAIR; //操作用户
  472. Obj.wProvideUser = INVALID_CHAIR; //供应用户
  473. Obj.cbCenterCard = 0; //中心扑克
  474. Obj.wOperateCode = 0; //操作代码
  475. Obj.cbOperateCard = new Array(4); //操作扑克
  476. Obj.bBeiQiangGang = false; //被抢杠状态
  477. Obj.bQiangGang = false; //抢杠状态
  478. Obj.dwGangScore = 0; //杠分
  479. return Obj;
  480. },
  481. //游戏结束
  482. CMD_S_GameEnd: function () {
  483. var Obj = new Object();
  484. Obj.dwUserID = new Array(this.GAME_PLAYER); //胡牌类型
  485. Obj.lGameTax = 0; //游戏税收
  486. Obj.wProvideUser = INVALID_CHAIR; //供应用户
  487. Obj.cbProvideCard = 0; //供应扑克
  488. Obj.dwChiHuKind = new Array(this.GAME_PLAYER); //胡牌类型
  489. Obj.dwChiHuRight = new Array(this.GAME_PLAYER); //胡牌类型
  490. Obj.dwChiHuRightAdd = 0;
  491. Obj.cbWeaveCount = new Array(this.GAME_PLAYER);
  492. Obj.weaveItem = new Array(this.GAME_PLAYER);
  493. for (var i = 0; i < this.GAME_PLAYER; i++) {
  494. Obj.weaveItem[i] = new Array(this.MAX_WEAVE)
  495. for (var j = 0; j < this.MAX_WEAVE; j++) {
  496. Obj.weaveItem[i][j] = this.CMD_WeaveItem();
  497. }
  498. }
  499. Obj.lGameScore = new Array(this.GAME_PLAYER); //游戏积分
  500. Obj.lGangScore = new Array(this.GAME_PLAYER); //杠牌得分
  501. Obj.cbCardCount = new Array(this.GAME_PLAYER); //扑克数目
  502. Obj.cbCardData = new Array(this.GAME_PLAYER); //扑克数据
  503. for (var i = 0; i < this.GAME_PLAYER; ++i) {
  504. Obj.cbCardData[i] = new Array(this.MAX_COUNT);
  505. }
  506. Obj.wLeftUser = INVALID_CHAIR; //玩家逃跑
  507. Obj.lSumGameScore = new Array(this.GAME_PLAYER);
  508. Obj.wYear = 0;
  509. Obj.cbTime = new Array(this.GAME_PLAYER);
  510. Obj.wCostTime = 0;
  511. Obj.cbWinCount = new Array(this.GAME_PLAYER);
  512. Obj.cbLZCount = new Array(this.GAME_PLAYER);
  513. Obj.cbHPCount = new Array(this.GAME_PLAYER);
  514. Obj.cbDPCount = new Array(this.GAME_PLAYER);
  515. Obj.cbZMCount = new Array(this.GAME_PLAYER);
  516. Obj.cbDouble = new Array(this.GAME_PLAYER);
  517. Obj.cbMagicIndex = 0; //会牌索引
  518. Obj.cbLastCardData = new Array(this.GAME_PLAYER); //分张
  519. Obj.cbMingGangCount = new Array(this.GAME_PLAYER); //明杠
  520. Obj.cbAnGangCount = new Array(this.GAME_PLAYER); //暗杠
  521. Obj.bListen = new Array(this.GAME_PLAYER); //天听
  522. Obj.bWinner = new Array(this.GAME_PLAYER); //赢家
  523. Obj.cbBirdCard = new Array(6); //鸟牌
  524. Obj.cbBirdCardCount = 0; //抓鸟数
  525. Obj.wBirdCount = 0; //中鸟数
  526. Obj.cbWinner = INVALID_CHAIR; //赢家
  527. Obj.cbFlowerCount = new Array(this.GAME_PLAYER);
  528. Obj.cbCardDataFlower = new Array(this.GAME_PLAYER);
  529. for (var i = 0; i < this.GAME_PLAYER; i++) {
  530. Obj.cbCardDataFlower[i] = new Array(8);
  531. }
  532. Obj.cbSick = new Array(3);
  533. Obj.cbUserDNXB = new Array(4);
  534. Obj.cbQuan = 0;
  535. Obj.cbFeng = 0;
  536. Obj.cbLianZhuangCount = 0;
  537. return Obj;
  538. },
  539. //大结算
  540. CMD_S_GameCustomInfo: function () {
  541. var Obj = new Object();
  542. Obj._name = "CMD_S_GameCustomInfo"
  543. Obj.dwUserID = new Array(this.GAME_PLAYER);
  544. Obj.cbZiMoCount = new Array(this.GAME_PLAYER); //地主次数
  545. Obj.cbHuCount = new Array(this.GAME_PLAYER); //胡牌次数
  546. Obj.cbDianPaoCount = new Array(this.GAME_PLAYER); //点炮次数
  547. Obj.cbMGangCount = new Array(this.GAME_PLAYER); //明杠次数
  548. Obj.cbAGangCount = new Array(this.GAME_PLAYER); //暗杠次数
  549. Obj.lTotalScore = new Array(this.GAME_PLAYER); //游戏总分
  550. return Obj;
  551. },
  552. //游戏状态
  553. CMD_S_StatusPlay: function () {
  554. var Obj = new Object();
  555. Obj.lCellScore = 0; //单元积分
  556. Obj.wBankerUser = INVALID_CHAIR; //庄家
  557. Obj.wCurrentUser = INVALID_CHAIR; //当前玩家
  558. Obj.cbActionCard = 0; //动作扑克
  559. Obj.wActionMask = 0; //动作掩码
  560. Obj.cbLeftCardCount = 0; //剩余牌数
  561. Obj.bTrustee = new Array(this.GAME_PLAYER);//是否托管
  562. Obj.wOutCardUser = INVALID_CHAIR; //出牌用户
  563. Obj.cbOutCardData = 0; //出牌扑克
  564. Obj.cbDiscardCount = new Array(this.GAME_PLAYER);//丢弃数目
  565. Obj.cbDiscardCard = new Array(this.GAME_PLAYER);
  566. for (var i = 0; i < this.GAME_PLAYER; i++) {
  567. Obj.cbDiscardCard[i] = new Array(60);
  568. }
  569. Obj.cbCardCount = 0; //扑克数目
  570. Obj.cbCardData = new Array(this.MAX_COUNT); //扑克列表
  571. Obj.cbSendCardData = 0; //发送扑克
  572. Obj.cbWeaveCount = new Array(this.GAME_PLAYER);
  573. Obj.weaveItem = new Array(this.GAME_PLAYER);
  574. for (var i = 0; i < this.GAME_PLAYER; i++) {
  575. Obj.weaveItem[i] = new Array(this.MAX_WEAVE)
  576. for (var j = 0; j < this.MAX_WEAVE; j++) {
  577. Obj.weaveItem[i][j] = this.CMD_WeaveItem();
  578. }
  579. }
  580. Obj.bLeave = new Array(this.GAME_PLAYER); //是否离开
  581. Obj.cbMakeMagicIndex = 0; //定会牌索引值
  582. Obj.cbDouble = new Array(this.GAME_PLAYER); //是否加倍(自由钢)
  583. Obj.bListen = new Array(this.GAME_PLAYER); //听牌
  584. Obj.cbCantOutCard = new Array(2); //不能吃付打付
  585. Obj.dwOperateTime = 0; //操作时间
  586. Obj.wHuangZhuangCount = 0; //黄庄次数
  587. Obj.bCanOutCard = false; //是否可出牌
  588. Obj.lGangScore = new Array(this.GAME_PLAYER); //杠分
  589. Obj.cbFlowerCount = new Array(this.GAME_PLAYER);
  590. Obj.cbCardDataFlower = new Array(this.GAME_PLAYER);
  591. for (var i = 0; i < this.GAME_PLAYER; i++) {
  592. Obj.cbCardDataFlower[i] = new Array(8);
  593. }
  594. Obj.cbSick = new Array(3);
  595. Obj.cbUserDNXB = new Array(4);
  596. Obj.cbQuan = 0;
  597. Obj.cbFeng = 0;
  598. Obj.lSumGameScore = new Array(4);
  599. return Obj;
  600. },
  601. //用户托管
  602. CMD_S_Trustee: function () {
  603. var Obj = new Object();
  604. Obj.bTrustee = false; //是否托管
  605. Obj.wChairID = INVALID_CHAIR; //托管用户
  606. return Obj;
  607. },
  608. //用户离开
  609. CMD_S_Leave: function () {
  610. var Obj = new Object();
  611. Obj.bLeave = new Array(this.GAME_PLAYER); //是否离开
  612. for (var i = 0; i < this.GAME_PLAYER; ++i) Obj.bLeave[i] = false;
  613. return Obj;
  614. },
  615. //下局准备
  616. CMD_S_NextReady: function () {
  617. var Obj = new Object();
  618. Obj.cbNextReadyStatus = new Array(this.GAME_PLAYER); //准备状态
  619. Obj.bNextReadyStatus = new Array(this.GAME_PLAYER);
  620. return Obj;
  621. },
  622. //用户离开
  623. //补牌
  624. CMD_C_ReplaceCard: function () {
  625. var Obj = new Object();
  626. Obj.isGameStart = 0;
  627. Obj.cbCardCount = 0;
  628. Obj.cbCardData = new Array(8);
  629. return Obj;
  630. },
  631. CMD_C_ReplaceCard4: function () {
  632. var Obj = new Object();
  633. Obj.cbCardData = new Array(8);
  634. Obj.cbGameStart = 0;
  635. Obj.cbCardCount = 0;
  636. return Obj;
  637. },
  638. //出牌命令
  639. CMD_C_OutCard: function () {
  640. var Obj = new Object();
  641. Obj.cbCardData = 0; //扑克数据
  642. Obj.bAddGang = false; //是否是补扭
  643. return Obj;
  644. },
  645. //操作命令
  646. CMD_C_OperateCard: function () {
  647. var Obj = new Object();
  648. Obj.wOperateCode = 0; //操作代码
  649. Obj.cbOperateCount = 0; //操作代码
  650. Obj.cbOperateCard = new Array(4); //操作扑克
  651. Obj.cbIndex = -1; //补杠的下标
  652. return Obj;
  653. },
  654. //用户托管
  655. CMD_C_Trustee: function () {
  656. var Obj = new Object();
  657. Obj.bTrustee = 0; //扑克数据
  658. return Obj;
  659. },
  660. //用户离开
  661. CMD_C_Leave: function () {
  662. var Obj = new Object();
  663. this.bLeave = false; //是否离开
  664. return Obj;
  665. },
  666. //加倍命令
  667. CMD_C_Double: function () {
  668. var Obj = new Object();
  669. Obj.cbDouble = 0; //255不加,1加1, 2加2
  670. return Obj;
  671. },
  672. GetProgress: function (wProgress, rules) {
  673. var cnt = this.GetGameCount(rules);
  674. value = '第' + wProgress + '/' + cnt + '圈';
  675. return value;
  676. },
  677. GameMaxPlayerCount: function (rules) {
  678. return this.GAME_PLAYER;
  679. },
  680. GetGameCount: function (rules) {
  681. //if (rules & this.GAME_RULE_JUSHU_1 ) return 4;
  682. if (rules & this.GAME_RULE_JUSHU_2) return 1;
  683. if (rules & this.GAME_RULE_JUSHU_3) return 2;
  684. if (rules & this.GAME_RULE_JUSHU_4) return 3;
  685. return 8;
  686. },
  687. //是否是局数
  688. IsPlayJu: function (rules) {
  689. return true;
  690. },
  691. GetRulesStr: function (dwServerRules, dwRulesArr) {
  692. console.log("dwServerRules:", dwServerRules);
  693. console.log("dwRulesArr:", dwRulesArr);
  694. var cstr = "";
  695. if (dwServerRules & this.GAME_RULE_SP_20) {
  696. cstr += " AA付費 ";
  697. } else {
  698. cstr += " 房主付費 ";
  699. }
  700. if (dwRulesArr[0] & this.GAME_RULE_SP_15) cstr += "台灣北部麻將";
  701. if (dwRulesArr[0] & this.GAME_RULE_SP_16) cstr += "台灣南部麻將";
  702. if (dwRulesArr[0] & this.GAME_RULE_SP_6) cstr += " 莊家無台";
  703. if (dwRulesArr[0] & this.GAME_RULE_SP_17) cstr += " 嚦咕嚦咕";
  704. cstr += " " + this.GetGameCount(dwServerRules) + "圈";
  705. if (dwServerRules & this.GAME_RULE_RENSHU_2) cstr += " 2人";
  706. if (dwServerRules & this.GAME_RULE_RENSHU_0) cstr += " 3人";
  707. if (dwServerRules & this.GAME_RULE_RENSHU_1) cstr += " 4人";
  708. if (dwRulesArr[0] & this.GAME_RULE_TUOGUAN_15) cstr += " 15秒";
  709. if (dwRulesArr[0] & this.GAME_RULE_TUOGUAN_30) cstr += " 30秒";
  710. if (dwRulesArr[0] & this.GAME_RULE_TUOGUAN_60) cstr += " 60秒";
  711. if (dwRulesArr[0] & this.GAME_RULE_TUOGUAN_NONE) cstr += " 無託管";
  712. if (dwRulesArr[1]) {
  713. cstr += ` 底分${dwRulesArr[1]}`;
  714. }
  715. if (dwRulesArr[2]) {
  716. cstr += ` 台数${dwRulesArr[2]}`;
  717. }
  718. // if (dwRulesArr[0] & this.GAME_RULE_RENSHU_LIMIT) cstr += " 不可少人";
  719. // if (dwRulesArr[0] & this.GAME_RULE_SP_3) cstr += " 飘123";
  720. // if (dwRulesArr[0] & this.GAME_RULE_SP_4) cstr += " 不飘";
  721. // if (dwRulesArr[0] & this.GAME_RULE_SP_5) cstr += " 飘135";
  722. // if (dwRulesArr[0] & this.GAME_RULE_SP_8) cstr += " 飘2";
  723. // if (dwRulesArr[0] & this.GAME_RULE_SP_9) cstr += " 飘3";
  724. // if (dwRulesArr[0] & this.GAME_RULE_SP_10) cstr += " 飘5";
  725. // if (dwRulesArr[0] & this.GAME_RULE_SP_11) cstr += " 飘8";
  726. // if (dwRulesArr[0] & this.GAME_RULE_SP_1) cstr += " 点炮胡";
  727. // if (dwRulesArr[0] & this.GAME_RULE_SP_2) cstr += " 自摸胡";
  728. // if (dwRulesArr[0] & this.GAME_RULE_SP_6) cstr += " 大胡";
  729. // if (dwRulesArr[0] & this.GAME_RULE_SP_7) cstr += " 红中玩法";
  730. // if (dwRulesArr[0] & this.GAME_RULE_SP_12) cstr += " 红中加倍";
  731. // if (dwRulesArr[0] & this.GAME_RULE_SP_13) cstr += " 起手四红中可胡";
  732. // if (dwRulesArr[0] & this.GAME_RULE_SP_14) cstr += " 中途四红中可胡";
  733. // if (dwRulesArr[0] & this.GAME_RULE_SP_15) cstr += " 抓2鸟";
  734. // if (dwRulesArr[0] & this.GAME_RULE_SP_16) cstr += " 抓4鸟";
  735. // if (dwRulesArr[0] & this.GAME_RULE_SP_17) cstr += " 抓6鸟";
  736. // if (dwRulesArr[0] & this.GAME_RULE_SP_18) cstr += " 飞鸟";
  737. // if (dwRulesArr[0] & this.GAME_RULE_SP_19) cstr += " 不抓鸟";
  738. return cstr;
  739. },
  740. GetTrusteeString: function (rules) {
  741. var str = '';
  742. if (rules & this.GAME_RULE_TUOGUAN_15) str += ' 15秒'
  743. if (rules & this.GAME_RULE_TUOGUAN_30) str += ' 30秒'
  744. if (rules & this.GAME_RULE_TUOGUAN_60) str += ' 60秒'
  745. if (rules & this.GAME_RULE_TUOGUAN_NONE) str += ' 無'
  746. //if (rules & this.GAME_RULE_MAGIC ) str+=' 混牌'
  747. return str;
  748. },
  749. GetHuRightString: function (rules, HuKind) {
  750. var str = '';
  751. if ((rules & this.CHR_MENQiNG) && (rules & this.CHR_ZI_MO)) {
  752. str += ' 門清自摸';
  753. } else {
  754. if (rules & this.CHR_MENQiNG) str += ' 門清';
  755. if (rules & this.CHR_ZI_MO) str += ' 自摸';
  756. }
  757. if (rules & this.CHR_PENG_PENG) str += ' 碰碰胡';
  758. if (rules & this.CHR_QI_DUI) str += ' 嚦咕嚦咕';
  759. if (rules & this.CHR_BAXIANGUOHAI) str += ' 八仙過海';
  760. if (rules & this.CHR_GANG_KAI) str += ' 杠上開花';
  761. if (rules & this.CHR_KUN_SI_SE) str += ' 混一色';
  762. if (rules & this.CHR_QING_YI_SE) str += ' 清一色';
  763. if (rules & this.CHR_QUAN_QIU_PAO) str += ' 全求';
  764. if (rules & this.CHR_DI_TING) str += ' 地聽';
  765. if (rules & this.CHR_TIAN_TING) str += ' 天聽';
  766. if (rules & this.CHR_SHAN_YUAN) str += ' 三元';
  767. if (rules & this.CHR_SHAN_YUAN_XIAO) str += ' 小三元';
  768. if (rules & this.CHR_XIAO_SI_XI) str += ' 小四喜';
  769. if (rules & this.CHR_HAI_DI) str += ' 海底撈';
  770. if (rules & this.CHR_GANG_PAO) str += ' 大三元';
  771. if (rules & this.CHR_QI_QIANG_YI) str += ' 7抢1';
  772. if (rules & this.CHR_QIANG_GANG) str += ' 搶杠胡';
  773. if (rules & this.CHR_DUN_TING) str += ' 獨聽';
  774. if (rules & this.CHR_ZI_SI_SE) str += ' 字一色';
  775. if (rules & this.CHR_SHAN_KAN) str += ' 三暗刻';
  776. if (rules & this.CHR_SI_KAN) str += ' 四暗刻';
  777. if (rules & this.CHR_WU_KAN) str += ' 五暗刻';
  778. if (rules & this.CHR_HUA_GANG) str += ' 花杠';
  779. if (rules & this.CHR_PING_HU) str += ' 平胡';
  780. //if (rules & this.CHR_CHI_HU ) str+=' 放炮';
  781. if ((rules & this.CHR_MEN_FENG) && (GameDef.m_dwGameRuleArr[0] & GameDef.GAME_RULE_SP_16)) str += ' 風台';
  782. if ((rules & this.CHR_MEN_FENG) && (GameDef.m_dwGameRuleArr[0] & GameDef.GAME_RULE_SP_15)) str += ' 門風';
  783. if (rules & this.CHR_HUA_PAI) str += ' 花牌';
  784. if (rules & this.CHR_FENG_QUAN) str += ' 風圈';
  785. if (this.dwChiHuRightAdd & this.CHR_DA_SI_XI && HuKind & this.WIK_CHI_HU) str += ' 大四喜';
  786. if (rules & this.CHR_LIAN_ZHUANG && GameDef.cbLianZhuangCount > 0) {
  787. str += ' 連' + GameDef.cbLianZhuangCount + "拉" + GameDef.cbLianZhuangCount
  788. } else {
  789. if (rules & this.CHR_BANKER && GameDef.cbLianZhuangCount == 0) str += ' 莊家';
  790. }
  791. return str;
  792. },
  793. IsNoCheat: function (rules) {
  794. if (rules & SERVER_RULES_GENERAL) {
  795. return false;
  796. }
  797. return true;
  798. },
  799. });
  800. GameDef = null;