Files
wnmj-normal/Servers/游戏组件/诈金花/消息定义/CMD_ZhaJinHua.h
2026-03-03 13:56:44 +08:00

219 lines
6.0 KiB
C

#ifndef CMD_ZJH_h__
#define CMD_ZJH_h__
#pragma once
//宏定义;
#define KIND_ID 6 //游戏ID;
#define GAME_PLAYER 5 //游戏人数;
#define GAME_NAME TEXT("诈金花") //游戏名字;
#define EXPORT_NAME TEXT("ZJH") //导出名称;
#define VERSION_SERVER PROCESS_VERSION(6,0,3) //程序版本;
#define VERSION_CLIENT PROCESS_VERSION(6,0,3) //程序版本;
//扑克;
#define MAX_COUNT 3 //扑克数目;
#define FULL_COUNT 52 //扑克总数;
#define MASK_COLOR 0xF0 //花色掩码;
#define MASK_VALUE 0x0F //数值掩码;
//牌型;
#define CT_ERROR 0 //无效类型;
#define CT_SINGLE 1 //单牌类型;
#define CT_DOUBLE 2 //对子类型;
#define CT_SHUN_ZI 3 //顺子类型;
#define CT_JIN_HUA 4 //金花类型;
#define CT_SHUN_JIN 5 //顺金类型;
#define CT_BAO_ZI 6 //豹子类型;
#define CT_SPECIAL 7 //235类型;
//游戏状态;
#define GS_ZJH_FREE GAME_STATUS_FREE //空闲状态;
#define GS_ZJH_SEND_CARD GAME_STATUS_PLAY //发牌阶段;
#define GS_ZJH_PLAYING (GAME_STATUS_PLAY+1) //游戏进行;
//游戏进行状态;
#define ST_GAMING_NULL 0 //旁观;
#define ST_GAMING_HIDDEN 1 //暗牌;
#define ST_GAMING_LOOK 2 //看牌;
#define ST_GAMING_LOSE 3 //比牌输;
#define ST_GAMING_GIVEUP 4 //放弃;
//操作类型;
#define OPERATE_NULL 0x00 //无效;
#define OPERATE_GIVEUP 0x01 //放弃;
#define OPERATE_LOOK 0x02 //看牌;
#define OPERATE_FOLLOW 0x04 //跟注;
#define OPERATE_ADD_CHIP 0x08 //加注;
#define OPERATE_COMPARE_CARD 0x10 //比牌;
//服务器命令码;
#define SUB_S_GAME_START 100 //游戏开始;
#define SUB_S_START_CHIP 101 //开始下注;
#define SUB_S_GIVE_UP 102 //放弃跟注;
#define SUB_S_USER_CHIP 103 //加注结果;
#define SUB_S_LOOK_CARD 104 //看牌跟注;
#define SUB_S_COMPARE_CARD 105 //比牌跟注;
#define SUB_S_GAME_END 106 //游戏结束;
#define SUB_S_CHEAT_CARD 111 //作弊消息;
//客户端命令码;
#define SUB_C_SEND_OVER 1 //发牌结束;
#define SUB_C_USER_OPERATE 2 //用户操作;
#define SUB_C_MASTER_CONTROL 10 //作弊控制;
#pragma pack(1)
//开房规则枚举;
enum tagZJHGameRuleEnum
{
eZJHGameRuleCardAA = 1, // 房卡AA
eZJHGameRuleCompareRound1 = 1 << 1, // 1轮比牌;
eZJHGameRuleCompareRound2 = 1 << 2, // 2轮比牌;
eZJHGameRuleCompareRound3 = 1 << 3, // 3轮比牌;
eZJHGameRuleOpenCardRound5 = 1 << 4, // 5轮开牌;
eZJHGameRuleOpenCardRound10 = 1 << 5, // 10轮开牌;
eZJHGameRuleOpenCardRound15 = 1 << 6, // 15轮开牌;
eZJHGameRuleLookCardRound0 = 1 << 7, // 不闷牌;
eZJHGameRuleLookCardRound2 = 1 << 8, // 闷2轮牌;
eZJHGameRuleLookCardRound3 = 1 << 9, // 闷3轮牌;
};
//游戏状态;
typedef struct CMD_S_StatusFree
{
LONG lCellScore; //基础积分;
BYTE cbCurRound; //当前轮数;
BYTE cbMaxRound; //最大轮数;
LONG lCurChipScore; //当前注数;
LONG lMaxChipScore; //最大可下注;
WORD wOperTimeOut; //操作超时时间;
}StatusBase;
//发牌状态;
struct CMD_S_StatusSendCard
{
StatusBase stBase; //基础信息;
bool bSendOver; //发牌结束;
WORD wBankerUser; //庄家用户;
BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态;
LONG lUserChipScore[GAME_PLAYER]; //玩家下注;
};
//游戏状态;
struct CMD_S_StatusPlay
{
StatusBase stBase; //基础信息
WORD wBankerUser; //庄家用户
WORD wCurrentUser; //当前玩家
DWORD dwOperateCode; //操作码
BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态
BYTE cbHandCardData[MAX_COUNT]; //扑克数据
LONG lUserChipScore[GAME_PLAYER]; //玩家下注
};
//游戏开始;
struct CMD_S_GameStart
{
BYTE cbCurRound; //当前轮数;
WORD wBankerUser; //庄家用户;
LONG lCurChipScore; //当前下注;
BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态;
LONG lUserChipScore[GAME_PLAYER]; //玩家下注;
};
//开始下注;
typedef struct CMD_S_StartChip
{
BYTE cbCurRound; //当前轮数;
WORD wCurrentUser; //当前用户;
DWORD dwOperateCode; //操作掩码;
LONG lCurChipScore; //当前下注;
}ChipInfo;
//用户下注;
struct CMD_S_ChipScore
{
WORD wChipUser; //加注用户;
LONG lChipScore; //下注筹码;
LONG lTtlChipScore; //总的下注;
DWORD dwOperateCode; //操作类型;
ChipInfo stChipInfo; //当前下注信息;
};
//用户放弃;
struct CMD_S_GiveUp
{
WORD wGiveUpUser; //放弃玩家;
ChipInfo stChipInfo; //当前下注信息;
};
//看牌数据包;
struct CMD_S_LookCard
{
WORD wLookUser; //看牌玩家;
BYTE cbCardData[MAX_COUNT]; //玩家扑克;
ChipInfo stChipInfo; //当前下注信息;
};
//比牌数据包;
struct CMD_S_CompareCard
{
bool bWin; //输赢结果;
WORD wChairID; //比牌者;
WORD wCompareUser; //被比牌者;
LONG lChipScore; //下注筹码;
LONG lTtlChipScore; //总的下注;
ChipInfo stChipInfo; //当前下注信息;
};
//游戏结束;
struct CMD_S_GameEnd
{
bool isPrivateEnd; //私人场是否结束;
BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态;
BYTE cbCardType[GAME_PLAYER]; //玩家牌型;
BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT]; //用户扑克;
LONG lGameScore[GAME_PLAYER]; //玩家游戏得分;
LONG lXiScore[GAME_PLAYER]; //喜钱;
};
//用户操作;
struct CMD_C_UserOperate
{
DWORD dwCode; //操作码;
LONG lData; //操作参数;
};
//机器人扑克;
struct CMD_S_CheatCardInfo
{
BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态;
BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT]; //用户扑克;
};
// 游戏解散结构;
struct CMD_S_Private_End_Info
{
BYTE aryActiveStatus[GAME_PLAYER]; //手牌状态;
SCORE aryWinScore[GAME_PLAYER]; //赢分;
SCORE aryXiScore[GAME_PLAYER]; //喜钱;
SCORE aryTotalScore[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));
}
}
};
#pragma pack()
#endif // CMD_ZJH_h__