Files
wnmj/Classes/Games/13S/13S_CMD.h
2026-02-13 14:34:15 +08:00

302 lines
8.7 KiB
C
Raw Permalink 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_SSS_GAME_HEAD_FILE_
#define _CMD_SSS_GAME_HEAD_FILE_
#include "Types.h"
#include "DataStream.h"
#pragma pack(1)
//游戏属性;
#define SSS_KIND_ID 502 //游戏ID;
#define SSS_GAME_PLAYER 4 //游戏人数;
#define SSS_GAME_NAME ("十三张") //游戏名字;
#define SSS_MAX_COUNT 13 //扑克数目;
#define SSS_FULL_COUNT 52 //最大牌库数量;
#define SSS_HAND_CARD_COUNT 13 //扑克数目;
#define SSS_GROUP_COUNT 3 //分组数量;
#define SSS_MIN_ITEM_COUNT 3 //最小牌数量;
#define SSS_MAX_ITEM_COUNT 5 //最大牌数量;
//扑克掩码;
#define SSS_MASK_VALUE 0x0F //数值掩码;
#define SSS_MASK_COLOR 0xF0 //花色掩码;
//玩家相关定义;
#define SSS_VIEW_TOP_ID 0 //顶部玩家;
#define SSS_VIEW_LEFT_ID 1 //左侧玩家;
#define SSS_VIEW_SELF_ID 2 //自己玩家;
#define SSS_VIEW_RIGHT_ID 3 //右侧玩家;
//游戏状态;
#define SSS_GS_WK_FREE GAME_STATUS_FREE //等待开始;
#define SSS_GS_WK_SEND_CARD GAME_STATUS_PLAY //发牌;
#define SSS_GS_WK_ROB_BANKER (GAME_STATUS_PLAY + 1) //抢庄;
#define SSS_GS_WK_USER_CHIP (GAME_STATUS_PLAY + 2) //下注;
#define SSS_GS_WK_OPEN_CARD (GAME_STATUS_PLAY + 3) //开牌;
#define SSS_GS_WK_COMPARE_CARD (GAME_STATUS_PLAY + 4) //比牌;
//开房规则枚举;
enum tagSSSGameRuleEnum
{
eSSSGameRuleCardAA = 1, //房卡AA;
eSSSGameRuleSend7Cards = 1 << 1, //发7张牌;
eSSSGameRuleRobBanker = 1 << 2, //抢庄;
eSSSGameRuleTurnBanker = 1 << 3, //轮流坐庄;
eSSSGameRuleFixBanker = 1 << 4, //霸王庄;
eSSSGameRuleClassic = 1 << 5 //经典玩法;
};
//////////////////////////////////////////////////////////////////////////
//手牌状态;
enum tagSSSHandCardStatusEnum
{
SSS_HAND_STATUS_NULL, //旁观;
SSS_HAND_STATUS_GIVEUP, //放弃;
SSS_HAND_STATUS_DISORDER, //散牌;
SSS_HAND_STATUS_SORTED, //排序牌;
};
//服务器命令结构;
#define SSS_SUB_S_GAME_START 101 //游戏开始;
#define SSS_SUB_S_START_ROB 102 //开始抢庄;
#define SSS_SUB_S_USER_ROB 103 //玩家抢庄;
#define SSS_SUB_S_START_CHIP 104 //开始下注;
#define SSS_SUB_S_USER_CHIP 105 //玩家下注;
#define SSS_SUB_S_SEND_LEFT_CARD 106 //发送剩下的牌;
#define SSS_SUB_S_START_OPEN 107 //开始开牌;
#define SSS_SUB_S_OPEN_CARD 108 //玩家摊牌;
#define SSS_SUB_S_CLASSIC_CMP_CARD 109 //经典玩法比牌;
#define SSS_SUB_S_BANKER_CMP_CARD 110 //带庄家玩法比牌;
#define SSS_SUB_S_GAME_END 111 //游戏结束;
//游戏状态;
typedef struct SSS_CMD_S_StatusFree
{
uint16 wRobBankerTime; //抢庄时间;
uint16 wUserChipTime; //下注时间;
uint16 wBuildCardTime; //配牌时间;
uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态;
}tagBaseStatus;
//抢庄状态;
struct SSS_CMD_S_StatusRob
{
tagBaseStatus BaseStatus;
uint8 cbRobStatus[SSS_GAME_PLAYER]; //抢庄状态 0:没操作1:不抢2:抢;
uint8 cbCardCount; //扑克数量;
uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //手牌数据;
};
//下注状态;
struct SSS_CMD_S_StatusChip
{
tagBaseStatus BaseStatus;
uint16 wBankerUser; //庄家用户;
uint8 cbChipStatus[SSS_GAME_PLAYER]; //下注状态;
int lUserChipScore[SSS_GAME_PLAYER]; //下注分数;
uint8 cbCardCount; //扑克数量;
uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //手牌数据;
};
//发牌状态;
struct SSS_CMD_S_StatusSendCard
{
tagBaseStatus BaseStatus;
uint16 wBankerUser; //庄家用户;
bool bSendOver; //发牌结束;
uint16 wSpecialType; //特殊牌型;
uint8 cbCardCount; //扑克数量;
uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //扑克牌数据;
};
//开牌状态;
struct SSS_CMD_S_StatusOpen
{
tagBaseStatus BaseStatus;
uint16 wBankerUser; //庄家用户;
uint16 wSpecialType; //特殊牌型;
int lUserChipScore[SSS_GAME_PLAYER]; //下注分数;
uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //扑克牌数据;
};
//庄家玩家比牌;
struct SSS_CMD_S_BankerCompareCard
{
uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态;
uint8 cbFrontCard[SSS_GAME_PLAYER][3]; //玩家前墩;
uint8 cbMidCard[SSS_GAME_PLAYER][5]; //玩家中墩;
uint8 cbBackCard[SSS_GAME_PLAYER][5]; //玩家后墩;
uint16 wHandCardType[SSS_GAME_PLAYER][3]; //每一道牌类型;
uint8 cbBankerCmpResult[SSS_GAME_PLAYER][3]; //庄家其他玩家比牌每一道结果;
uint8 cbOtherCmResult[SSS_GAME_PLAYER][3]; //其他玩家与庄家比牌每一道结果;
};
//带庄家玩法比牌状态;
struct SSS_CMD_S_StatusBankerCompare
{
uint16 wRobBankerTime; //抢庄时间;
uint16 wUserChipTime; //下注时间;
uint16 wBuildCardTime; //配牌时间;
bool bCompareOver; //比牌结束;
uint16 wBankerUser; //庄家用户;
int lUserChipScore[SSS_GAME_PLAYER]; //下注分数;
SSS_CMD_S_BankerCompareCard CompareStatus; //比牌状态;
};
//玩家比牌;
struct SSS_CMD_S_ClassicCompareCard
{
uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态;
uint16 wSpecialType[SSS_GAME_PLAYER]; //特殊牌型;
int nSpecialCompareResult[SSS_GAME_PLAYER]; //特殊牌型比较结果;
uint8 cbFrontCard[SSS_GAME_PLAYER][SSS_MIN_ITEM_COUNT]; //玩家前墩;
uint8 cbMidCard[SSS_GAME_PLAYER][SSS_MAX_ITEM_COUNT]; //玩家中墩;
uint8 cbBackCard[SSS_GAME_PLAYER][SSS_MAX_ITEM_COUNT]; //玩家后墩;
uint16 wHandCardType[SSS_GAME_PLAYER][SSS_GROUP_COUNT]; //每一道牌类型;
int nCompareResult[SSS_GAME_PLAYER][SSS_GROUP_COUNT]; //每一道比较结果;
bool bDaoshui[SSS_GAME_PLAYER]; //倒水;
int aryShootDaoShu[SSS_GAME_PLAYER][SSS_GAME_PLAYER]; //用来计算一家和另一家打枪要加的水数;
uint8 aryShootState[6][2]; //0为赢的玩家,1为输的玩家,值为255为无效玩家;
uint8 cbShootCount; //几家打枪;
int cbThreeKillResult[SSS_GAME_PLAYER]; //全垒打加减分;
uint16 wAllUser; //全垒打用户;
};
//比牌状态;
struct SSS_CMD_S_StatusClassicCompare
{
uint16 wRobBankerTime; //抢庄时间;
uint16 wUserChipTime; //下注时间;
uint16 wBuildCardTime; //配牌时间;
bool bCompareOver; //比牌结束;
SSS_CMD_S_ClassicCompareCard CompareStatus; //比牌状态;
};
//////////////////////////////////////////////////////////////////////////
//游戏开始;
struct SSS_CMD_S_GameStart
{
uint16 wBankerChairID; //庄家ID;
uint16 wSpecialType; //特殊牌型;
uint8 cbBossCount; //王数量;
uint8 cbCardCount; //扑克数量;
uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //扑克数据;
uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态;
};
//玩家抢庄;
struct SSS_CMD_S_UserRob
{
uint16 wRobUser; //抢庄玩家;
bool bRobResult; //是否抢庄;
};
//开始下注;
struct SSS_CMD_S_StartChip
{
uint16 wBankerUser; //庄家用户;
};
//玩家下注;
struct SSS_CMD_S_UserChip
{
uint16 wChipUser; //下注玩家;
int lChipScore; //下注分数;
};
//玩家剩余的牌;
struct SSS_CMD_S_SendLeftCard
{
uint8 cbLeftCardCount; //剩余的扑克数量;
uint8 cbLeftCardData[SSS_HAND_CARD_COUNT]; //剩余的扑克数据;
uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //扑克数据;
};
//玩家摊牌;
struct SSS_CMD_S_OpenCard
{
uint16 wChairID; //摊牌玩家;
};
//游戏结束;
struct SSS_CMD_S_GameEnd
{
bool isPrivateEnd; //私人场是否结束;
uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态;
SCORE lGameScore[SSS_GAME_PLAYER]; //游戏积分;
};
//////////////////////////////////////////////////////////////////////////
//客户端命令结构;
#define SSS_SUB_C_GETBANK 301 //抢庄命令;
#define SSS_SUB_C_SEND_OVER 302 //发牌结束;
#define SSS_SUB_C_OPEN_CARD 303 //玩家摊牌;
#define SSS_SUB_C_COMPARE_OVER 304 //比牌完成;
#define SSS_SUB_C_ROB_BANKER 305 //玩家抢庄;
#define SSS_SUB_C_CHIP_SCORE 306 //玩家下注;
//用户叫庄;
struct SSS_CMD_C_RobBanker
{
bool bRob; //是否抢庄;
};
//用户加注;
struct SSS_CMD_C_ChipScore
{
int lScore; //下注数目;
};
//分段信息;
struct SSS_CMD_C_OpenCard
{
uint8 cbFrontCard[SSS_MIN_ITEM_COUNT]; //前墩扑克;
uint8 cbMidCard[SSS_MAX_ITEM_COUNT]; //中墩扑克;
uint8 cbBackCard[SSS_MAX_ITEM_COUNT]; //后墩扑克;
uint16 wSpecialType; //是否是特殊牌;
};
//////////////////////////////////////////////////////////////////////////
// 游戏解散结构;
struct SSS_CMD_S_Private_End_Info
{
uint8 aryActiveStatus[SSS_GAME_PLAYER]; //手牌状态;
SCORE lUserScore[SSS_GAME_PLAYER]; //玩家分数;
uint8 aryWinTimes[SSS_GAME_PLAYER]; //赢次数;
uint8 aryLoseTimes[SSS_GAME_PLAYER]; //输次数;
uint8 aryShootTimes[SSS_GAME_PLAYER]; //打枪次数;
uint8 aryKillAllTimes[SSS_GAME_PLAYER]; //全垒打次数;
void StreamValue(DataStream& kData, bool bSend)
{
if (bSend)
{
kData.pushValue(this, sizeof(SSS_CMD_S_Private_End_Info));
}
else
{
kData.popValue(this, sizeof(SSS_CMD_S_Private_End_Info));
}
}
};
//////////////////////////////////////////////////////////////////////////////////
#pragma pack()
#endif