Files
wnmj-normal/Classes/Games/WNMJ/WN_CMD_Sparrow.h
2026-03-03 13:56:44 +08:00

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