Files
wnmj/Servers/游戏组件/房卡牛牛/消息定义/CMD_NiuNiu.h
2026-02-13 14:34:15 +08:00

302 lines
7.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef CMD_NiuNiu_h__
#define CMD_NiuNiu_h__
//公共宏定义;
#define KIND_ID 2 //游戏ID;
#define GAME_PLAYER 5 //游戏人数;
#define GAME_NAME TEXT("房卡牛牛") //游戏名字;
#define EXPORT_NAME TEXT("NiuNiu") //导出名称;
#define VERSION_SERVER PROCESS_VERSION(6,0,3) //程序版本;
#define VERSION_CLIENT PROCESS_VERSION(6,0,3) //程序版本;
//数量定义;
#define MAX_COUNT 5 //手牌数量;
#define FULL_COUNT 52 //牌库数量;
//扑克掩码;
#define MASK_VALUE 0x0F //数值掩码;
#define MASK_COLOR 0xF0 //花色掩码;
//牌型定义;
#define NIU_TYPE_0 0 //无牛;
#define NIU_TYPE_1 1 //牛一;
#define NIU_TYPE_2 2 //牛二;
#define NIU_TYPE_3 3 //牛三;
#define NIU_TYPE_4 4 //牛四;
#define NIU_TYPE_5 5 //牛五;
#define NIU_TYPE_6 6 //牛六;
#define NIU_TYPE_7 7 //牛七;
#define NIU_TYPE_8 8 //牛八;
#define NIU_TYPE_9 9 //牛九;
#define NIU_TYPE_10 10 //牛牛;
#define NIU_TYPE_WHN 11 //五花牛;
#define NIU_TYPE_SHN 12 //四炸;
#define NIU_TYPE_WXN 13 //五小牛;
#define MAX_NIU_TYPE 13 //最大牛类型;
//规则定义;
#define RULE_HUA_NIU 0x01 //有花牛;
#define RULE_SAN_ZHANG 0x02 //三张牛;
#define RULE_FREE_CHIP 0x04 //自由下注;
#define RULE_NIU_FAN 0x08 //有牛番;
#define BANKER_OWNER 1 //房主坐庄;
#define BANKER_TURNS 2 //轮流坐庄;
#define BANKER_ROB 3 //经典抢庄;
#define BANKER_ROB4 4 //翻4张抢庄;
enum eNNRuleEnum
{
eNNRuleEnum_CardAA = 1, //房卡AA;
eNNRuleEnum_BANKER_OWNER = 1 << 1, //房主坐庄;;
eNNRuleEnum_BANKER_TURNS = 1 << 2, //轮流坐庄;
eNNRuleEnum_BANKER_ROB = 1 << 3, //经典抢庄;;
eNNRuleEnum_BANKER_ROB4 = 1 << 4, //翻4张抢庄;
eNNRuleEnum_NO_SPECIAL_NIU = 1 << 5, //无特殊牛;
eNNRuleEnum_BAYONET = 1 << 6, //拼刺刀;
eNNRuleEnum_WHN = 1 << 7, //五花牛;
eNNRuleEnum_BOMB = 1 << 8, //炸弹;
eNNRuleEnum_WXN = 1 << 9, //五小牛;
};
#pragma pack(1)
//规则配置参数;
typedef struct tagGameRuleCfg
{
WORD wGameRule = 0; //游戏规则;
WORD wBankerRule = 0; //坐庄规则;
BYTE cbMinFreeChip = 0; //最小下注;
BYTE cbMaxFreeChip = 0; //最大下注;
} tagOpenRuleCfg;
//状态命令;
#define GS_NN_FREE GAME_STATUS_FREE //空闲状态;
#define GS_NN_SEND_CARD GAME_STATUS_PLAY //发牌状态;
#define GS_NN_ROB_BANKER (GAME_STATUS_PLAY+1) //抢庄状态;
#define GS_NN_USER_CHIP (GAME_STATUS_PLAY+2) //下注状态;
#define GS_NN_OPEN_CARD (GAME_STATUS_PLAY+3) //开牌状态;
#define GS_NN_SHOW_CARD (GAME_STATUS_PLAY+4) //亮牌状态;
//////////////////////////////////////////////////////////////////////////////////////
//控制类型;
typedef enum{ CONTINUE_WIN, CONTINUE_LOST, CONTINUE_CANCEL }CONTROL_TYPE;
//控制结果 控制成功 、控制失败 、控制取消成功 、控制取消无效;
typedef enum{ CONTROL_SUCCEED, CONTROL_FAIL, CONTROL_CANCEL_SUCCEED, CONTROL_CANCEL_INVALID }CONTROL_RESULT;
//用户行为;
typedef enum{ USER_SITDOWN, USER_STANDUP, USER_OFFLINE, USER_RECONNECT }USERACTION;
//控制信息;
typedef struct
{
CONTROL_TYPE control_type; //控制类型;
BYTE cbControlCount; //控制局数;
bool bCancelControl; //取消标识;
}USERCONTROL;
//房间用户信息;
typedef struct
{
WORD wChairID; //椅子ID;
WORD wTableID; //桌子ID;
DWORD dwGameID; //GAMEID;
bool bAndroid; //机器人标识;
TCHAR szNickName[LEN_NICKNAME]; //用户昵称;
BYTE cbUserStatus; //用户状态;
BYTE cbGameStatus; //游戏状态;
}ROOMUSERINFO;
//房间用户控制;
typedef struct
{
ROOMUSERINFO roomUserInfo; //房间用户信息;
USERCONTROL userControl; //用户控制;
}ROOMUSERCONTROL;
//////////////////////////////////////////////////////////////////////////////////////
//空闲状态;
struct CMD_S_StatusFree
{
LONG lCellScore; //基础积分;
LONG lMinFreeChip; //最小可下注;
LONG lMaxFreeChip; //最大可下注;
BYTE cbHandCardCount; //手牌数量;
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
};
//发牌状态;
struct CMD_S_StatusSend
{
CMD_S_StatusFree stStatusFree; //公共数据;
WORD wBankerUser; //庄家用户;
BYTE cbSendStatus; //发牌状态;
BYTE cbHandCardData[MAX_COUNT]; //手牌数据;
};
//抢庄状态;
struct CMD_S_StatusRob
{
CMD_S_StatusFree stStatusFree; //公共数据;
BYTE cbRobStatus[GAME_PLAYER]; //抢庄状态 0:没操作1:不抢2:抢;
BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT];//手牌数据;
};
//下注状态;
struct CMD_S_StatusChip
{
CMD_S_StatusFree stStatusFree; //公共数据;
WORD wBankerUser; //庄家用户;
BYTE cbChipStatus[GAME_PLAYER]; //下注状态;
LONG lUserChipScore[GAME_PLAYER];//下注分数;
BYTE cbHandCardData[MAX_COUNT]; //手牌数据;
};
//等待开牌状态;
struct CMD_S_StatusOpen
{
CMD_S_StatusFree stStatusFree; //公共数据;
WORD wBankerUser; //庄家用户;
LONG lUserChipScore[GAME_PLAYER];//下注分数;
BYTE cbOpenStatus[GAME_PLAYER]; //开牌状态;
BYTE cbHandCardType; //牌型;
BYTE cbHandCardData[MAX_COUNT]; //手牌数据;
};
//显示所有人牌状态;
struct CMD_S_StatusAllOpen
{
CMD_S_StatusFree stStatusFree; //公共数据;
WORD wBankerUser; //庄家用户;
BYTE cbOpenStatus[GAME_PLAYER]; //开牌状态;
LONG lUserChipScore[GAME_PLAYER];//下注分数;
BYTE cbHandCardType[GAME_PLAYER];//牌型;
BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT];//手牌数据;
};
//////////////////////////////////////////////////////////////////////////
//服务器命令;
#define SUB_S_GAME_START 100 //游戏开始;
#define SUB_S_START_ROB 101 //开始抢庄;
#define SUB_S_USER_ROB 102 //玩家抢庄;
#define SUB_S_START_CHIP 103 //开始下注;
#define SUB_S_USER_CHIP 104 //玩家下注;
#define SUB_S_START_OPEN 105 //开始开牌;
#define SUB_S_OPEN_CARD 106 //玩家开牌;
#define SUB_S_GAME_END 107 //游戏结束;
#define SUB_S_ALL_OPEN_CARD 108 //玩家开牌;
//游戏开始;
struct CMD_S_GameStart
{
WORD wBankerUser; //庄家用户;
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
BYTE cbHandCardCount; //手牌数量;
BYTE cbHandCardData[MAX_COUNT]; //手牌数据;
};
//玩家抢庄;
struct CMD_S_UserRob
{
WORD wRobUser; //抢庄玩家;
bool bRobResult; //是否抢庄;
};
//开始下注;
struct CMD_S_StartChip
{
WORD wBankerUser; //庄家用户;
};
//玩家下注;
struct CMD_S_UserChip
{
WORD wChipUser; //下注玩家;
LONG lChipScore; //下注分数;
};
//玩家开牌;
struct CMD_S_OpenCard
{
WORD wOpenUser; //开牌玩家;
BYTE cbCardType; //手牌类型;
BYTE cbCardData[MAX_COUNT]; //开牌数据;
};
//所有人开牌;
struct CMD_S_AllOpenCard
{
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
BYTE cbCardType[GAME_PLAYER]; //手牌类型;
BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT];//手牌数据;
};
//游戏结束;
struct CMD_S_GameEnd
{
BYTE cbCardType[GAME_PLAYER]; //手牌类型;
BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT];//手牌数据;
LONG lAllScore[GAME_PLAYER]; //游戏得分;
LONG lGameScore[GAME_PLAYER]; //游戏得分;
LONG lRevenue[GAME_PLAYER]; //税收;
};
//////////////////////////////////////////////////////////////////////////
//客户端命令;
#define SUB_C_SEND_OVER 1 //发牌完成;
#define SUB_C_ROB_BANKER 2 //玩家抢庄;
#define SUB_C_CHIP_SCORE 3 //玩家下注;
#define SUB_C_OPEN_CARD 4 //玩家开牌;
//用户叫庄;
struct CMD_C_RobBanker
{
bool bRob; //是否抢庄;
};
//用户加注;
struct CMD_C_ChipScore
{
LONG lScore; //下注数目;
};
enum EN_NN_RESULT_TYPE
{
NN_RT_ALL_WIN = 0, // 通杀;
NN_RT_ALL_LOSE, // 通赔;
NN_RT_NIUNIU, // 牛牛;
NN_RT_WIN, // 赢;
};
// 游戏解散结构;
struct CMD_S_Private_End_Info
{
WORD wMainChairID; // 房主;
BYTE cbFinishCout; // 完成局数;
bool aryActiveStatus[GAME_PLAYER]; // 手牌状态;
SCORE lAllScore[GAME_PLAYER]; // 总成绩;
BYTE aryResultTypeCount[GAME_PLAYER][4]; //牌型数量;
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));
}
}
};
#pragma pack()
#endif // CMD_NiuNiu_h__