Files
wnmj/Servers/游戏组件/万年麻将/游戏服务器/TableFrameSink.h

295 lines
8.9 KiB
C
Raw Normal View History

2026-02-13 14:34:15 +08:00
#ifndef TABLE_FRAME_SINK_HEAD_FILE
#define TABLE_FRAME_SINK_HEAD_FILE
#pragma once
#include "Stdafx.h"
#include "GameLogic.h"
//////////////////////////////////////////////////////////////////////////
//ö<>ٶ<EFBFBD><D9B6><EFBFBD>
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum enEstimatKind
{
EstimatKind_OutCard, //<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
EstimatKind_GangCard, //<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
};
enum eGangType
{
eGangType_BuGang, //<2F><><EFBFBD><EFBFBD>;
eGangType_MingGang, //<2F><><EFBFBD><EFBFBD>;
eGangType_AnGang, //<2F><><EFBFBD><EFBFBD>;
};
//////////////////////////////////////////////////////////////////////////
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class CTableFrameSink : public ITableFrameSink, public ITableUserAction
{
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
protected:
bool m_bActiveUser[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
WORD m_wSiceCount; //<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>
WORD m_wSiceCount2; //<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
WORD m_wSiceCount3; //<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>3
WORD m_wBankerUser; //ׯ<><D7AF><EFBFBD>û<EFBFBD>
BYTE m_cbCardIndex[GAME_PLAYER][MAX_INDEX]; //<2F>û<EFBFBD><C3BB>˿<EFBFBD>
bool m_bCallCard[GAME_PLAYER]; //ϴ<><CFB4><EFBFBD><EFBFBD>־
BYTE m_cbBatch[GAME_PLAYER]; //ϴ<><EFBFBD><E8B1B6>
bool m_bTrustee[GAME_PLAYER]; //<2F>Ƿ<EFBFBD><C7B7>й<EFBFBD>
bool m_bBatchEnd[GAME_PLAYER]; //ϴ<><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>;
protected:
SCORE m_lAllTurnScore[GAME_PLAYER]; //<2F>ֵܾ÷<D6B5>
SCORE m_lLastTurnScore[GAME_PLAYER]; //<2F>Ͼֵ÷<D6B5>
BYTE m_cbAllGangCounts[GAME_PLAYER]; //ͳ<>ƸܵĴ<DCB5><C4B4><EFBFBD>;
protected:
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>;
BYTE m_cbDelCardIndex[GAME_PLAYER][MAX_INDEX];//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD>˿˺<CBBF>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
protected:
WORD m_wOutCardUser; //<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
BYTE m_cbOutCardData; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BYTE m_cbOutCardCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE m_cbDiscardCount[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE m_cbDiscardCard[GAME_PLAYER][55]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
BYTE m_cbGangCount; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
INT m_BankContinueCount; //<2F><>ׯ<EFBFBD><D7AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>¥
BYTE m_cbMustLeft; //<2F><><38><C7BD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
protected:
BYTE m_cbSendCardData; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BYTE m_cbSendCardCount; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
BYTE m_cbLeftCardCount; //ʣ<><CAA3><EFBFBD><EFBFBD>Ŀ
BYTE m_cbRepertoryCard[MAX_REPERTORY]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BYTE m_cbMasterCheckCard[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>
//<2F><><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
protected:
WORD m_wResumeUser; //<2F><>ԭ<EFBFBD>û<EFBFBD>
WORD m_wCurrentUser; //<2F><>ǰ<EFBFBD>û<EFBFBD>
WORD m_wProvideUser; //<2F><>Ӧ<EFBFBD>û<EFBFBD>
BYTE m_cbProvideCard; //<2F><>Ӧ<EFBFBD>˿<EFBFBD>
WORD m_wProvideMingGangUser; //<2F><>Ӧ<EFBFBD><D3A6><EFBFBD>ܵ<EFBFBD><DCB5>û<EFBFBD>;
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>
protected:
bool m_bSendStatus; //<2F><><EFBFBD><EFBFBD>״̬
bool m_bGangStatus; //<2F><><EFBFBD><EFBFBD>״̬
//bool m_bEnjoinChiHu[GAME_PLAYER]; //<2F><>ֹ<EFBFBD>Ժ<EFBFBD>
//bool m_bEnjoinChiPeng[GAME_PLAYER]; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
//<2F>û<EFBFBD>״̬
public:
bool m_bResponse[GAME_PLAYER]; //<2F><>Ӧ<EFBFBD><D3A6>־
WORD m_wUserAction[GAME_PLAYER]; //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
BYTE m_cbOperateCard[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
WORD m_wPerformAction[GAME_PLAYER]; //ִ<>ж<EFBFBD><D0B6><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
protected:
BYTE m_cbWeaveItemCount[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
tagWeaveItem m_WeaveItemArray[GAME_PLAYER][4]; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
protected:
BYTE m_cbChiHuCard; //<2F>Ժ<EFBFBD><D4BA>˿<EFBFBD>
tagChiHuResult m_ChiHuResult[GAME_PLAYER]; //<2F>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
CGameLogic m_GameLogic; //<2F><>Ϸ<EFBFBD>߼<EFBFBD>
ITableFrame * m_pITableFrame; //<2F><><EFBFBD>ܽӿ<DCBD>
const tagGameServiceOption * m_pGameServiceOption; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
//<2F><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>
protected:
static const WORD m_wPlayerCount; //<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
//static const enStartMode m_GameStartMode; //<2F><>ʼģʽ
BYTE m_genDaLiHuCards[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ;
BYTE m_genHuCards[GAME_PLAYER][4]; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ֵ;
BYTE m_genPengCards[GAME_PLAYER][4]; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ֵ;
BYTE m_cbContinueGangs[GAME_PLAYER]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ܵĴ<DCB5><C4B4><EFBFBD>;
tagGangCardResult m_GangPaiResult[GAME_PLAYER]; //<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
BYTE m_cbContinueGangTypes[GAME_PLAYER][4]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>θܵ<CEB8><DCB5><EFBFBD><EFBFBD><EFBFBD>;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CTableFrameSink();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CTableFrameSink();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
virtual VOID Release() { delete this; }
//<2F>ӿڲ<D3BF>ѯ
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><>ʼ<EFBFBD><CABC>
virtual bool Initialization(IUnknownEx * pIUnknownEx);
//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
virtual void RepositionSink();
//<2F><>ѯ<EFBFBD>ӿ<EFBFBD>
public:
//<2F><>ѯ<EFBFBD>޶<EFBFBD>
virtual SCORE QueryConsumeQuota(IServerUserItem * pIServerUserItem){return 0;}
//<2F><><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD>
virtual SCORE QueryLessEnterScore(WORD wChairID, IServerUserItem * pIServerUserItem){return 0;}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual bool OnDataBaseMessage(WORD wRequestID, VOID * pData, WORD wDataSize){return false;}
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual bool OnUserScroeNotify(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason){return false;}
//<2F><>ѯ<EFBFBD>Ƿ<EFBFBD><C7B7>۷<EFBFBD><DBB7><EFBFBD><EFBFBD><EFBFBD>
virtual bool QueryBuckleServiceCharge(WORD wChairID){return true;}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
virtual void SetGameBaseScore(LONG lBaseScore){};
//<2F><>Ϸ״̬
virtual bool IsUserPlaying(WORD wChairID);
//<2F><>Ϸ<EFBFBD>¼<EFBFBD>
public:
//<2F><>Ϸ<EFBFBD><CFB7>ʼ
virtual bool OnEventGameStart();
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
virtual bool OnEventGameConclude(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason);
//<2F><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
virtual bool OnEventSendGameScene(WORD wChiarID, IServerUserItem * pIServerUserItem, BYTE cbGameStatus, bool bSendSecret);
//<2F>¼<EFBFBD><C2BC>ӿ<EFBFBD>
public:
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>¼<EFBFBD>
virtual bool OnTimerMessage(DWORD wTimerID, WPARAM wBindParam);
//<2F><>Ϸ<EFBFBD><CFB7>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
virtual bool OnGameMessage(WORD wSubCmdID, VOID * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
virtual bool OnFrameMessage(WORD wSubCmdID, VOID * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem);
//<2F><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
virtual bool OnGameDataBase(WORD wRequestID, VOID * pData, WORD wDataSize);
//<2F>û<EFBFBD><C3BB>¼<EFBFBD>
public:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnActionUserOffLine(WORD wChairID,IServerUserItem * pIServerUserItem) { return true; }
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnActionUserConnect(WORD wChairID,IServerUserItem * pIServerUserItem) { return true; }
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnActionUserSitDown(WORD wChairID,IServerUserItem * pIServerUserItem, bool bLookonUser);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
virtual bool OnActionUserStandUp(WORD wChairID,IServerUserItem * pIServerUserItem, bool bLookonUser);
//<2F>û<EFBFBD>ͬ<EFBFBD><CDAC>
virtual bool OnActionUserOnReady(WORD wChairID,IServerUserItem * pIServerUserItem, void * pData, WORD wDataSize) { return true; }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>;
virtual bool OnActionUserFangKaCheck(WORD wChairID, IServerUserItem * pIServerUserItem, SCORE lUserInsure) { return true; }
//<2F>û<EFBFBD><C3BB><EFBFBD>ʼ<EFBFBD><CABC>Ϸ
virtual bool OnActionUserOnStart(WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
//<2F>û<EFBFBD><C3BB><EFBFBD>ʼ<EFBFBD><CABC>Ϸ
virtual bool OnActionUserStartGame(WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
//<2F><>Ϸ<EFBFBD>¼<EFBFBD>
protected:
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool OnUserOutCard(WORD wChairID, BYTE cbCardData);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool OnUserOperateCard(WORD wChairID, WORD wOperateCode, BYTE cbOperateCard);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD>
BYTE GetOperateCard(WORD wChairID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
//<2F><><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>
bool SendOperateNotify(const tagGangCardResult& GangCardResult);
//<2F>ɷ<EFBFBD><C9B7>˿<EFBFBD>
bool DispatchCardData(WORD wCurrentUser,bool bNotGang=true);
//<2F><>Ӧ<EFBFBD>ж<EFBFBD>
bool EstimateUserRespond(WORD wCenterUser, BYTE cbCenterCard, enEstimatKind EstimatKind);
//˽<>˳<EFBFBD>
public:
virtual void SetPrivateInfo(BYTE bGameTypeIdex, DWORD bGameRuleIdex);
//<2F><><EFBFBD><EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
virtual void ResetPrivateEndInfo();
//<2F><><EFBFBD><EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
virtual void GetPrivateEndInfo(DataStream &kDataStream, bool bSend);
//<2F>ж<EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
virtual bool IsPrivateEnd();
//<2F><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual WORD GetRealChairCount();
// <20><>ȡ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>Ӻ<EFBFBD>;
WORD getNextChairID(WORD wChairID);
//˽<>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
public:
bool IsHasGameRule(eWNMJRuleEnum eType ); //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>;
BYTE GetFanShuType();
//<2F><><EFBFBD>ú<EFBFBD><C3BA>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
BYTE GetHURuleType();
// ¼<><C2BC><EFBFBD>¼<EFBFBD>
public:
// <20><>Ϸ<EFBFBD><CFB7>ʼ
void starGameRecord();
// <20><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>ʾ;
void addGameRecordAction(WORD wSubCmdID, void* pSubMessage, int nMessageSize);
private:
//<2F>ѳ<EFBFBD><D1B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>DelCardIndex;
void InsertIntoDelCardIndex(WORD wChairID, tagWeaveItem &reftagWeaveItem);
void InsertIntoDelCardIndex(WORD wChairID, BYTE cbRemoveCard[], BYTE cbRemoveCount);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>ֵ;
void InsertGenHuCards(WORD wChairID, BYTE cbHuCardData);
bool IsInInsertGenHuCards(WORD wChairID, BYTE cbCardData);
bool HasGenHuCards(WORD wChairID);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ;
void InsertGenPengCards(WORD wChairID, BYTE cbPengCardData);
bool IsInInsertGenPengCards(WORD wChairID, BYTE cbCardData);
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>
BYTE getSendCardData(WORD dwSendUser);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>;
void sendMasterLeftCard(int nChairdID);
//ʹ<><CAB9><EFBFBD>ƿ<EFBFBD>
void UseCardLibrary();
//<2F><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>ɾ<EFBFBD><C9BE>һЩ<D2BB><D0A9>
bool RemoveCards(BYTE cbCards[], BYTE cbCardCount, BYTE cbRemoveCards[], BYTE cbRemoveCount);
//˽<>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
public:
CMD_S_Private_End_Info m_PrivateEndInfo;
//¼<><C2BC>
public:
tagGameRecord m_kGameRecord;
//<2F><><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
protected:
WORD m_wCheatChairID; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ú<EFBFBD>
WORD m_wDropped; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
//////////////////////////////////////////////////////////////////////////
#endif