Files
wnmj-normal/Servers/游戏组件/万年麻将/消息定义/CMD_Sparrow.h
2026-03-03 13:56:44 +08:00

342 lines
9.2 KiB
C

#ifndef CMD_SPARROW_HEAD_FILE
#define CMD_SPARROW_HEAD_FILE
#pragma pack(1)
//////////////////////////////////////////////////////////////////////////
//公共宏定义
#define KIND_ID 558 //游戏 I D
#define GAME_PLAYER 4 //游戏人数
#define GAME_NAME TEXT("万年麻将") //游戏名字
#define GAME_GENRE (GAME_GENRE_SCORE|GAME_GENRE_MATCH|GAME_GENRE_GOLD) //游戏类型
//游戏状态
#define GS_MJ_FREE GAME_STATUS_FREE //空闲状态
#define GS_MJ_BATCH (GAME_STATUS_PLAY+1) //洗澡状态
#define GS_MJ_SICE (GAME_STATUS_PLAY+2) //筛子状态
#define GS_MJ_PLAY (GAME_STATUS_PLAY+3) //游戏状态
#define MAX_COUNT 14 //最大数目
#define MUST_LEFT_COUNT 1 //预留数目
#define MAX_INDEX 34 //最大索引
//////////////////////////////////////////////////////////////////////////
#define VERSION_SERVER PROCESS_VERSION(6,0,3) //程序版本
#define VERSION_CLIENT PROCESS_VERSION(6,0,3) //程序版本
//组合子项
struct tagWeaveItem
{
WORD wWeaveKind; //组合类型
BYTE cbCenterCard; //中心扑克
BYTE cbPublicCard; //公开标志
WORD wProvideUser; //供应用户
};
enum eWNMJHURuleEnum
{
eWNMJHURuleEnum_Invalid = 0,
eWNMJHURuleEnum_YingHU = 1,
eWNMJHURuleEnum_YiBianDaoHU = 2,
eWNMJHURuleEnum_HunHU = 3,
};
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, //2~4人;
eWNMJRuleEnum_DaiKaiFang = 1 << 30, //代开房;
eWNMJRuleEnum_NOSameIPAddr = 1 << 31, //不可以同IP地址;
};
//////////////////////////////////////////////////////////////////////////
//服务器命令结构
#define SUB_S_GAME_START 100 //游戏开始
#define SUB_S_OUT_CARD 101 //出牌命令
#define SUB_S_SEND_CARD 102 //发送扑克
#define SUB_S_OPERATE_NOTIFY 104 //操作提示
#define SUB_S_OPERATE_RESULT 105 //操作命令
#define SUB_S_GAME_END 106 //游戏结束
#define SUB_S_TRUSTEE 107 //用户托管
#define SUB_S_BATCH 108 //洗澡命令
#define SUB_S_GANG_SCORE 109 //杠分消息;
#define SUB_S_MASTER_LEFTCARD 114 //剩余牌堆
//游戏状态
struct CMD_S_StatusFree
{
SCORE lCellScore; //基础金币
WORD wBankerUser; //庄家用户
bool bTrustee[GAME_PLAYER]; //是否托管
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
SCORE lAllTurnScore; //总局得分
SCORE lLastTurnScore; //上局得分
};
//游戏状态
struct CMD_S_StatusBatch
{
SCORE lCellScore; //基础金币
BYTE bComplete; //完成标志
bool bTrustee[GAME_PLAYER]; //是否托管
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
//历史积分
SCORE lAllTurnScore[4]; //总局得分
SCORE lLastTurnScore[4]; //上局得分
};
//杠牌结果
struct tagGangCardResult
{
BYTE cbCardCount; //扑克数目
BYTE cbCardData[4]; //扑克数据
};
//游戏状态
struct CMD_S_StatusPlay
{
//游戏变量
SCORE lCellScore; //单元积分
WORD wSiceCount; //骰子点数
WORD wSiceCount2; //骰子点数
WORD wSiceCount3; //骰子点数
WORD wBankerUser; //庄家用户
WORD wCurrentUser; //当前用户
bool bTrustee[GAME_PLAYER]; //是否托管
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
//风牌记录
BYTE cbFengCardData[8]; //风牌记录
BYTE cbFengCardCount; //风牌记录
//状态变量
BYTE cbLeftCardCount; //剩余数目
BYTE cbActionCard; //动作扑克
WORD dwActionMask; //动作掩码
tagGangCardResult GangPaiResult; //杠牌操作
//出牌信息
WORD wOutCardUser; //出牌用户
BYTE cbOutCardData; //出牌扑克
BYTE cbDiscardCount[4]; //丢弃数目
BYTE cbDiscardCard[4][55]; //丢弃记录
//扑克数据
BYTE cbCardCount; //扑克数目
BYTE cbCardData[MAX_COUNT]; //扑克列表
BYTE cbSendCardData; //发送扑克
//组合扑克
BYTE cbWeaveCount[4]; //组合数目
tagWeaveItem WeaveItemArray[4][4]; //组合扑克
//历史积分
SCORE lAllTurnScore[4]; //总局得分
SCORE lLastTurnScore[4]; //上局得分
};
//游戏开始
struct CMD_S_GameStart
{
WORD wSiceCount; //骰子点数
WORD wBankerUser; //庄家用户
WORD wCurrentUser; //当前用户
BYTE wUserAction; //用户动作
tagGangCardResult GangPaiResult; //杠牌操作
BYTE cbCardData[MAX_COUNT]; //扑克列表
bool bTrustee[GAME_PLAYER]; //是否托管
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
};
// 录像专用;
struct CMD_R_GameStart
{
WORD wSiceCount; //骰子点数
WORD wBankerUser; //庄家用户
WORD wCurrentUser; //当前用户
BYTE wUserAction; //用户动作
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
BYTE cbCardData[GAME_PLAYER][MAX_COUNT]; //扑克列表
};
struct CMD_S_BatchResult
{
BYTE cbBatchResult[GAME_PLAYER]; //庄家用户
};
//出牌命令
struct CMD_S_OutCard
{
WORD wOutCardUser; //出牌用户
BYTE cbOutCardData; //出牌扑克
};
//发送扑克
struct CMD_S_SendCard
{
BYTE cbCardData; //扑克数据
WORD wActionMask; //动作掩码
WORD wCurrentUser; //当前用户
bool cbIsNotGang; //是否杠牌
tagGangCardResult GangPaiResult; //杠牌操作
};
//操作提示
struct CMD_S_OperateNotify
{
WORD wResumeUser; //还原用户
WORD dwActionMask; //动作掩码
BYTE cbActionCard; //动作扑克
tagGangCardResult GangPaiResult; //杠牌操作
};
//操作命令
struct CMD_S_OperateResult
{
WORD wOperateUser; //操作用户
WORD wProvideUser; //供应用户
WORD dwOperateCode; //操作代码
BYTE cbOperateCard; //操作扑克
};
//杠分消息;
struct CMD_S_GangScore
{
WORD wChairId; //杠牌者;
BYTE cbXiaYu; //是否暗杠;
};
//游戏结束
struct CMD_S_GameEnd
{
//税收
SCORE lGameTax; //游戏税收
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
//结束信息
WORD wProvideUser; //供应用户
BYTE cbChiHuCard; //供应扑克
DWORD dwChiHuKind[GAME_PLAYER]; //胡牌类型
DWORD dwChiHuRight[GAME_PLAYER]; //胡牌类型
//积分信息
SCORE lGameScore[GAME_PLAYER]; //游戏积分
SCORE lGameScoreEx[GAME_PLAYER]; //奖励分
SCORE lGameHuScore[GAME_PLAYER]; //胡牌分;
//扑克信息
BYTE cbCardCount[GAME_PLAYER]; //扑克数目
BYTE cbCardData[GAME_PLAYER][MAX_COUNT]; //扑克数据
BYTE cbWeaveItemCount[GAME_PLAYER]; //组合数目
tagWeaveItem WeaveItemArray[GAME_PLAYER][4]; //组合牌
SCORE lAllTurnScore[GAME_PLAYER]; //总局得分
SCORE lLastTurnScore[GAME_PLAYER]; //上局得分
};
//用户托管
struct CMD_S_Trustee
{
bool bTrustee; //是否托管
WORD wChairID; //托管用户
};
//////////////////////////////////////////////////////////////////////////
//客户端命令结构
#define SUB_C_OUT_CARD 1 //出牌命令;
#define SUB_C_BATCH 2 //洗澡开始;
#define SUB_C_OPERATE_CARD 3 //操作扑克;
#define SUB_C_TRUSTEE 4 //用户托管;
#define SUB_C_BATCH_END 5 //洗澡完毕;
#define SUB_C_PASS_KING 6 //经过精牌;
#define SUB_C_MASTER_CHEAKCARD 10 //选择的牌;
#define SUB_C_MASTER_LEFTCARD 11 //剩余牌堆;
//出牌命令
struct CMD_C_OutCard
{
BYTE cbCardData; //扑克数据
};
//洗澡
struct CMD_C_BATCH
{
BYTE cbChipTimes; //买顶倍数
WORD wCurrentUser; //当前用户
};
//操作命令
struct CMD_C_OperateCard
{
WORD dwOperateCode; //操作代码
BYTE cbOperateCard; //操作扑克
};
//用户托管
struct CMD_C_Trustee
{
bool bTrustee; //是否托管
};
struct CMD_C_MaterCheckCard
{
BYTE cbCheakCard; //操作代码
};
struct MasterLeftCard
{
BYTE kMasterCheakCard; // 当前选择;
BYTE kMasterLeftIndex[MAX_INDEX]; // 排堆;
};
// 游戏解散结构
struct CMD_S_Private_End_Info
{
bool aryActiveStatus[GAME_PLAYER]; //玩家状态;
BYTE cbAllGangCounts[GAME_PLAYER]; //统计杠的次数;
BYTE cbZiMoCout[GAME_PLAYER]; //自摸次数;
BYTE 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(TCHAR *szLog, ...);
//////////////////////////////////////////////////////////////////////////
#pragma pack()
#endif