477 lines
13 KiB
C++
477 lines
13 KiB
C++
#ifndef CMD_NCSPARROW_HEAD_FILE
|
|
#define CMD_NCSPARROW_HEAD_FILE
|
|
|
|
#include "Array.h"
|
|
#include "DataStream.h"
|
|
|
|
#pragma pack(1)
|
|
|
|
//游戏属性
|
|
#define WN_KIND_ID 558 //游戏 I D
|
|
#define WN_GAME_NAME ("麻将") //游戏名字
|
|
|
|
namespace WNMJ_SPACE{
|
|
|
|
#define WNSP_FPS (1.0f/60.0f) // 一帧多长时间
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//公共宏定义
|
|
enum GAME_INFO
|
|
{
|
|
KIND_ID = 558, //游戏 I D
|
|
GAME_PLAYER = 4, //游戏人数
|
|
SELF_VIEW_CHAIRID = 2, // 自己的视图椅子号
|
|
};
|
|
|
|
//游戏状态
|
|
enum GAME_STATUS
|
|
{
|
|
GS_MJ_NULL = 0xff,
|
|
GS_MJ_FREE = GAME_STATUS_FREE, //空闲状态
|
|
GS_MJ_BATCH = (GAME_STATUS_PLAY+1), //洗澡状态
|
|
GS_MJ_SICE = (GAME_STATUS_PLAY+2), //筛子状态
|
|
GS_MJ_PLAY = (GAME_STATUS_PLAY+3), //游戏状态
|
|
};
|
|
|
|
enum MAX_VALUE_NC
|
|
{
|
|
MAX_COUNT = 14, //最大数目
|
|
MAX_WEAVE = 4, //最大组合
|
|
MAX_INDEX = 34, //最大索引
|
|
MAX_REPERTORY = 136, //最大库存
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//组合子项
|
|
struct tagWeaveItem
|
|
{
|
|
uint16 wWeaveKind; //组合类型
|
|
uint8 cbCenterCard; //中心扑克
|
|
uint8 cbPublicCard; //公开标志
|
|
uint16 wProvideUser; //供应用户
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//服务器命令结构
|
|
enum SERVER_COM
|
|
{
|
|
SUB_S_GAME_START = 100, //游戏开始
|
|
SUB_S_OUT_CARD = 101, //出牌命令
|
|
SUB_S_SEND_CARD = 102, //发送扑克
|
|
SUB_S_OPERATE_NOTIFY = 104, //操作提示
|
|
SUB_S_OPERATE_RESULT = 105, //操作命令
|
|
SUB_S_GAME_END = 106, //游戏结束
|
|
SUB_S_TRUSTEE = 107, //用户托管
|
|
SUB_S_BATCH = 108, //洗澡命令
|
|
SUB_S_GANG_SCORE = 109, //杠分消息;
|
|
SUB_S_MASTER_LEFTCARD = 114, //剩余牌堆
|
|
};
|
|
|
|
//游戏规则
|
|
enum eWNMJRuleEnum
|
|
{
|
|
eWNMJRuleEnum_Null = 0, //无效值;
|
|
eWNMJRuleEnum_CardAA = 1, //房卡AA;
|
|
eWNMJRuleEnum_OneTwoFAN = 1 << 1, //1,2翻倍;
|
|
eWNMJRuleEnum_TwoThreeFAN = 1 << 2, //2,3翻倍;
|
|
eWNMJRuleEnum_YingHU = 1 << 3, //硬胡;
|
|
eWNMJRuleEnum_YiBianDaoHU = 1 << 4, //一边倒胡;
|
|
eWNMJRuleEnum_HunHU = 1 << 5, //混子打发;
|
|
eWNMJRuleEnum_ZhiAnGang = 1 << 6, //直暗杠翻倍;
|
|
eWNMJRuleEnum_PlayCount2 = 1 << 7, //2人;
|
|
eWNMJRuleEnum_PlayCount3 = 1 << 8, //3人;
|
|
eWNMJRuleEnum_PlayCount_auto = 1 << 29, //代开房;
|
|
eWNMJRuleEnum_DaiKaiFang = 1 << 30, //代开房;
|
|
eWNMJRuleEnum_NOSameIPAddr = 1 << 31, //不可以同IP地址;
|
|
};
|
|
|
|
//游戏状态
|
|
struct CMD_S_StatusFree
|
|
{
|
|
SCORE lCellScore; //基础金币
|
|
uint16 wBankerUser; //庄家用户
|
|
bool bTrustee[GAME_PLAYER]; //是否托管
|
|
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
|
|
SCORE lAllTurnScore; //总局得分
|
|
SCORE lLastTurnScore; //上局得分
|
|
|
|
};
|
|
|
|
//游戏状态
|
|
struct CMD_S_StatusBatch
|
|
{
|
|
SCORE lCellScore; //基础金币
|
|
uint8 bComplete; //完成标志
|
|
bool bTrustee[GAME_PLAYER]; //是否托管
|
|
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
|
|
|
|
//历史积分
|
|
SCORE lAllTurnScore[4]; //总局得分
|
|
SCORE lLastTurnScore[4]; //上局得分
|
|
|
|
};
|
|
|
|
//杠牌结果
|
|
struct tagGangCardResult
|
|
{
|
|
uint8 cbCardCount; //扑克数目
|
|
uint8 cbCardData[4]; //扑克数据
|
|
};
|
|
|
|
//游戏状态
|
|
struct CMD_S_StatusPlay
|
|
{
|
|
//游戏变量
|
|
SCORE lCellScore; //单元积分
|
|
uint16 wSiceCount; //骰子点数
|
|
uint16 wSiceCount2; //骰子点数
|
|
uint16 wSiceCount3; //骰子点数
|
|
uint16 wBankerUser; //庄家用户
|
|
uint16 wCurrentUser; //当前用户
|
|
bool bTrustee[GAME_PLAYER]; //是否托管
|
|
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
|
|
|
|
//风牌记录
|
|
uint8 cbFengCardData[8]; //风牌记录
|
|
uint8 cbFengCardCount; //风牌记录
|
|
|
|
//状态变量
|
|
uint8 cbLeftCardCount; //剩余数目
|
|
uint8 cbActionCard; //动作扑克
|
|
uint16 dwActionMask; //动作掩码
|
|
tagGangCardResult GangPaiResult; //杠牌操作
|
|
|
|
//出牌信息
|
|
uint16 wOutCardUser; //出牌用户
|
|
uint8 cbOutCardData; //出牌扑克
|
|
uint8 cbDiscardCount[4]; //丢弃数目
|
|
uint8 cbDiscardCard[4][55]; //丢弃记录
|
|
|
|
//扑克数据
|
|
uint8 cbCardCount; //扑克数目
|
|
uint8 cbCardData[MAX_COUNT]; //扑克列表
|
|
uint8 cbSendCardData; //发送扑克
|
|
|
|
//组合扑克
|
|
uint8 cbWeaveCount[4]; //组合数目
|
|
tagWeaveItem WeaveItemArray[4][4]; //组合扑克
|
|
|
|
//历史积分
|
|
SCORE lAllTurnScore[4]; //总局得分
|
|
SCORE lLastTurnScore[4]; //上局得分
|
|
};
|
|
|
|
//游戏开始
|
|
struct CMD_S_GameStart
|
|
{
|
|
uint16 wSiceCount; //骰子点数
|
|
//uint16 wSiceCount2; //骰子点数2
|
|
//uint16 wSiceCount3; //骰子点数3
|
|
|
|
uint16 wBankerUser; //庄家用户
|
|
uint16 wCurrentUser; //当前用户
|
|
uint8 wUserAction; //用户动作
|
|
tagGangCardResult GangPaiResult; //杠牌操作
|
|
|
|
uint8 cbCardData[MAX_COUNT]; //扑克列表
|
|
|
|
bool bTrustee[GAME_PLAYER]; //是否托管
|
|
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
|
|
};
|
|
|
|
// 录像专用;
|
|
struct CMD_R_GameStart
|
|
{
|
|
uint16 wSiceCount; //骰子点数
|
|
|
|
uint16 wBankerUser; //庄家用户
|
|
uint16 wCurrentUser; //当前用户
|
|
uint8 wUserAction; //用户动作
|
|
tagGangCardResult GangPaiResult; //杠牌操作
|
|
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
|
|
|
|
uint8 cbCardData[GAME_PLAYER][MAX_COUNT]; //扑克列表
|
|
};
|
|
|
|
struct CMD_S_BatchResult
|
|
{
|
|
uint8 cbBatchResult[GAME_PLAYER]; //庄家用户
|
|
};
|
|
|
|
//出牌命令
|
|
struct CMD_S_OutCard
|
|
{
|
|
uint16 wOutCardUser; //出牌用户
|
|
uint8 cbOutCardData; //出牌扑克
|
|
};
|
|
|
|
//发送扑克
|
|
struct CMD_S_SendCard
|
|
{
|
|
uint8 cbCardData; //扑克数据
|
|
uint16 wActionMask; //动作掩码
|
|
uint16 wCurrentUser; //当前用户
|
|
bool cbIsNotGang; //是否杠牌
|
|
tagGangCardResult GangPaiResult; //杠牌操作
|
|
};
|
|
|
|
//操作提示
|
|
struct CMD_S_OperateNotify
|
|
{
|
|
uint16 wResumeUser; //还原用户
|
|
uint16 dwActionMask; //动作掩码
|
|
uint8 cbActionCard; //动作扑克
|
|
tagGangCardResult GangPaiResult; //杠牌操作
|
|
};
|
|
|
|
//操作命令
|
|
struct CMD_S_OperateResult
|
|
{
|
|
uint16 wOperateUser; //操作用户
|
|
uint16 wProvideUser; //供应用户
|
|
uint16 dwOperateCode; //操作代码
|
|
uint8 cbOperateCard; //操作扑克
|
|
};
|
|
|
|
//杠分消息;
|
|
struct CMD_S_GangScore
|
|
{
|
|
uint16 wChairId; //杠牌者;
|
|
uint8 cbXiaYu; //是否暗杠;
|
|
};
|
|
|
|
//游戏结束
|
|
struct CMD_S_GameEnd
|
|
{
|
|
//税收
|
|
SCORE lGameTax; //游戏税收
|
|
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
|
|
|
|
//结束信息
|
|
uint16 wProvideUser; //供应用户
|
|
uint8 cbChiHuCard; //供应扑克
|
|
uint32 dwChiHuKind[GAME_PLAYER]; //胡牌类型
|
|
uint32 dwChiHuRight[GAME_PLAYER]; //胡牌类型
|
|
|
|
//积分信息
|
|
SCORE lGameScore[GAME_PLAYER]; //游戏积分
|
|
SCORE lGameScoreEx[GAME_PLAYER]; //奖励分
|
|
SCORE lGameHuScore[GAME_PLAYER]; //胡牌分;
|
|
|
|
//扑克信息
|
|
uint8 cbCardCount[GAME_PLAYER]; //扑克数目
|
|
uint8 cbCardData[GAME_PLAYER][MAX_COUNT]; //扑克数据
|
|
|
|
uint8 cbWeaveItemCount[GAME_PLAYER]; //组合数目
|
|
tagWeaveItem WeaveItemArray[GAME_PLAYER][4]; //组合牌
|
|
|
|
SCORE lAllTurnScore[GAME_PLAYER]; //总局得分
|
|
SCORE lLastTurnScore[GAME_PLAYER]; //上局得分
|
|
|
|
};
|
|
|
|
//用户托管
|
|
struct CMD_S_Trustee
|
|
{
|
|
bool bTrustee; //是否托管
|
|
uint16 wChairID; //托管用户
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//客户端命令结构
|
|
enum SUB_CLIENT
|
|
{
|
|
SUB_C_OUT_CARD = 1, //出牌命令
|
|
SUB_C_BATCH = 2, //洗澡开始
|
|
SUB_C_OPERATE_CARD = 3, //操作扑克
|
|
SUB_C_TRUSTEE = 4, //用户托管
|
|
SUB_C_BATCH_END = 5, //洗澡完毕
|
|
SUB_C_PASS_KING = 6, //经过精牌
|
|
SUB_C_MASTER_CHEAKCARD = 10, //选择的牌
|
|
SUB_C_MASTER_LEFTCARD = 11, //剩余牌堆
|
|
};
|
|
|
|
//定时器定义
|
|
enum TIME_TYPE
|
|
{
|
|
IDI_NULL = -1, //未启动定时器
|
|
IDI_BASESCORE = 1, //底注设置定时器
|
|
IDI_SHOOT_DICE = 2, //掷骰子定时器
|
|
IDI_DISPATCH_CARD = 3, //发牌计时器
|
|
IDI_SEND_CARD = 4, //摸牌计时器
|
|
IDI_SEND_BUHUA = 5, //补花计时器
|
|
//IDI_OUT_CARD = 6, //出牌计时器(暂时不用和操作提示用同一个定时器)
|
|
IDI_USER_OPERATE = 7, //操作计时器
|
|
IDI_USER_OFFLINE = 10, //断线延时托管计时器
|
|
IDI_StartGame = 100, //开始计时器ID
|
|
|
|
//定时器时间
|
|
IDT_BASESCORE = 25, //设置底注时间
|
|
IDT_SHOOT_DICE = 1, //掷骰子时间
|
|
IDT_DISPATCH_CARD = 10, //发牌时间
|
|
IDT_SEND_CARD = 2, //摸牌时间
|
|
IDT_SEND_BUHUA = 2, //补花时间
|
|
IDT_OUT_CARD = 20, //出牌时间
|
|
IDT_USER_OPERATE = 25, //操作时间
|
|
IDT_USER_TRUST = 1, //托管时间
|
|
IDT_USER_TING = 1, //听牌时间
|
|
IDT_USER_OFFLINE = 15, //断线延时托管时间
|
|
|
|
};
|
|
|
|
#define CUSTOM_EVENT_OUT_CARD "CustomEventOutCard" //出牌事件
|
|
#define CUSTOM_EVENT_OPER_CARD "CustomEventOperCard" //操作牌事件
|
|
#define CUSTOM_EVENT_GET_CARD "CustomEventGetCard" //要牌事件;
|
|
|
|
//出牌命令
|
|
struct CMD_C_OutCard
|
|
{
|
|
uint8 cbCardData; //扑克数据
|
|
};
|
|
|
|
//洗澡
|
|
struct CMD_C_BATCH
|
|
{
|
|
uint8 cbChipTimes; //买顶倍数
|
|
uint16 wCurrentUser; //当前用户
|
|
};
|
|
|
|
//操作命令
|
|
struct CMD_C_OperateCard
|
|
{
|
|
uint16 dwOperateCode; //操作代码
|
|
uint8 cbOperateCard; //操作扑克
|
|
};
|
|
|
|
//用户托管
|
|
struct CMD_C_Trustee
|
|
{
|
|
bool bTrustee; //是否托管
|
|
};
|
|
|
|
// 要牌结构
|
|
struct CMD_C_MaterCheckCard
|
|
{
|
|
uint8 cbCheakCard; //操作代码
|
|
};
|
|
|
|
struct MasterLeftCard
|
|
{
|
|
uint8 kMasterCheakCard; // 当前选择;
|
|
uint8 kMasterLeftIndex[MAX_INDEX]; // 排堆;
|
|
};
|
|
|
|
//结算积分信息
|
|
struct tagClientScoreInfo
|
|
{
|
|
//积分信息
|
|
uint16 wChairID; //服务器位置
|
|
|
|
uint32 dwUserID; //用户ID
|
|
uint32 dwGameID; //用户ID
|
|
char szHeadHttp[LEN_USER_NOTE]; //登录IP
|
|
char szNickName[LEN_NICKNAME]; //用户昵称
|
|
char szUnionName[LEN_GROUP_NAME]; //公会名称;
|
|
|
|
uint16 wProvideUser; //供应用户
|
|
uint16 wBankerUser; //庄家用户
|
|
uint8 cbChiHuCard; //供应扑克
|
|
uint32 dwChiHuKind; //胡牌类型
|
|
uint32 dwChiHuRight; //胡牌类型
|
|
|
|
//积分信息
|
|
SCORE lGameScore; //游戏积分
|
|
|
|
//牌信息
|
|
uint8 cbCardCount; //牌数目
|
|
uint8 cbCardData[MAX_COUNT]; //牌数据
|
|
|
|
//组合牌
|
|
uint8 cbWeaveItemCount; //组合数目
|
|
tagWeaveItem WeaveItemArray[MAX_WEAVE]; //组合牌
|
|
|
|
|
|
};
|
|
|
|
/////////////////////////////// 游戏内使用 ///////////////////////////////////////////
|
|
enum GAME_SOUND
|
|
{
|
|
//语音类型定义
|
|
ST_FangYan = 0, //南京话
|
|
ST_PuTongHua = 1, //普通话
|
|
|
|
//背景音效定义
|
|
EF_BackGround_Normal = 0, //正常音效
|
|
EF_BackGround_TingPai = 1, //听牌音效
|
|
EF_BackGround_BiXiaHu = 2, //比下胡音效
|
|
|
|
//公共音效类型
|
|
EF_GameStart = 100, //开始
|
|
EF_ShootDice = 101, //骰子
|
|
EF_TakeCard = 102, //发牌
|
|
EF_SendCard = 103, //摸牌
|
|
EF_GameWarn = 104, //警笛
|
|
EF_OutCard = 105, //出牌
|
|
EF_GameEnd = 106, //结束
|
|
EF_GameWin = 107, //胜利
|
|
EF_GameLose = 108, //失败
|
|
EF_GameHuang = 109, //荒庄
|
|
EF_GameRun = 110, //逃跑
|
|
EF_HitChime = 111, //敲击编钟
|
|
|
|
//声音文件类型
|
|
SD_BuHua = 200, //补花
|
|
SD_OutCard = 201, //出牌
|
|
SD_ChiCard = 202, //吃牌
|
|
SD_PengCard = 203, //碰牌
|
|
SD_GangCard = 204, //杠牌
|
|
SD_TingCard = 205, //听牌
|
|
SD_TiaoZhan = 206, //挑战
|
|
SD_HuCard = 207, //胡牌
|
|
SD_ZiMoHu = 208, //自摸
|
|
SD_QuYu = 209, //趣语
|
|
};
|
|
|
|
// 动画类型
|
|
enum ANI_TYPE
|
|
{
|
|
AT_DICE = 0, // 骰子动画
|
|
AT_DISCARD, // 丢弃动画
|
|
AT_OUTCARD, // 打牌动画
|
|
AT_CHI, // 吃动画
|
|
AT_PENG, // 碰动画
|
|
AT_GANG, // 杠动画
|
|
AT_TING, // 听动画
|
|
AT_HU, // 胡动画
|
|
AT_ZIMO, // 自摸动画
|
|
AT_COUNT, // 动画数量
|
|
};
|
|
|
|
// 游戏解散结构
|
|
struct CMD_S_Private_End_Info
|
|
{
|
|
bool aryActiveStatus[GAME_PLAYER]; //玩家状态;
|
|
uint8 cbAllGangCounts[GAME_PLAYER]; //杠次数
|
|
uint8 cbZiMoCout[GAME_PLAYER]; //自摸次数
|
|
uint8 cbDianPaoCout[GAME_PLAYER]; //点炮次数
|
|
SCORE lAllScore[GAME_PLAYER]; //总成绩
|
|
SCORE lMaxScore[GAME_PLAYER]; //最高得分
|
|
|
|
void StreamValue(DataStream& kData, bool bSend)
|
|
{
|
|
if (bSend)
|
|
{
|
|
kData.pushValue(this, sizeof(CMD_S_Private_End_Info));
|
|
}
|
|
else
|
|
{
|
|
kData.popValue(this, sizeof(CMD_S_Private_End_Info));
|
|
}
|
|
}
|
|
};
|
|
};
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//extern void MyLog( char *szLog, ... );
|
|
|
|
#pragma pack()
|
|
#endif |