#include "StdAfx.h" #include "Resource.h" #include "DlgServerWizard.h" #include "ModuleDBParameter.h" #include ".\dlgserverwizard.h" ////////////////////////////////////////////////////////////////////////////////// //页面定义 #define ITEM_SERVER_OPTION_1 0 //配置选择 #define ITEM_SERVER_OPTION_2 1 //配置选择 #define ITEM_SERVER_OPTION_3 2 //配置选择 #define ITEM_SERVER_OPTION_CUSTOM 3 //定制配置 ////////////////////////////////////////////////////////////////////////////////// BEGIN_MESSAGE_MAP(CDlgServerOptionItem, CDialog) ON_WM_SIZE() END_MESSAGE_MAP() BEGIN_MESSAGE_MAP(CDlgServerWizardItem, CDialog) ON_WM_SIZE() END_MESSAGE_MAP() ////////////////////////////////////////////////////////////////////////////////// BEGIN_MESSAGE_MAP(CDlgServerOptionItem1, CDlgServerOptionItem) ON_CBN_SELCHANGE(IDC_SERVER_TYPE, OnSelchangeServerType) ON_CBN_SELCHANGE(IDC_VENUE_TYPE, OnSelchangeVenueType) ON_CBN_SELCHANGE(IDC_SERVER_KIND, OnSelchangeServerKind) ON_BN_CLICKED(IDC_REVENUE_RADIO, OnBnClickedRevenueRadio) ON_BN_CLICKED(IDC_SERVICE_RADIO, OnBnClickedServiceRadio) END_MESSAGE_MAP() BEGIN_MESSAGE_MAP(CDlgServerOptionItem2, CDlgServerOptionItem) END_MESSAGE_MAP() BEGIN_MESSAGE_MAP(CDlgServerOptionItem3, CDlgServerOptionItem) END_MESSAGE_MAP() BEGIN_MESSAGE_MAP(CDlgServerOptionItemCustom, CDlgServerOptionItem) ON_WM_SETFOCUS() ON_WM_NCDESTROY() END_MESSAGE_MAP() ////////////////////////////////////////////////////////////////////////////////// BEGIN_MESSAGE_MAP(CDlgServerWizardItem1, CDlgServerWizardItem) ON_NOTIFY(NM_DBLCLK, IDC_MODULE_LIST, OnNMDblclkModuleList) END_MESSAGE_MAP() BEGIN_MESSAGE_MAP(CDlgServerWizardItem2, CDlgServerWizardItem) ON_WM_SETFOCUS() ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_CTRL, OnTcnSelchangeTabCtrl) END_MESSAGE_MAP() BEGIN_MESSAGE_MAP(CDlgServerWizard, CDialog) ON_BN_CLICKED(IDC_LAST, OnBnClickedLast) ON_BN_CLICKED(IDC_NEXT, OnBnClickedNext) ON_BN_CLICKED(IDC_FINISH, OnBnClickedFinish) END_MESSAGE_MAP() ////////////////////////////////////////////////////////////////////////////////// //构造函数 CDlgServerOptionItem::CDlgServerOptionItem(UINT nIDTemplate) : CDialogEx(nIDTemplate) { //设置变量 m_pDlgServerWizard = NULL; m_pGameServiceAttrib = NULL; m_pGameServiceOption = NULL; return; } //析构函数 CDlgServerOptionItem::~CDlgServerOptionItem() { } //保存数据 bool CDlgServerOptionItem::SaveItemData() { //保存数据 if ((m_hWnd != NULL) && (SaveInputInfo() == false)) { return false; } return true; } //显示配置 bool CDlgServerOptionItem::ShowOptionItem(const CRect & rcRect, CWnd * pParentWnd) { //创建窗口 if (m_hWnd == NULL) { //设置资源 AfxSetResourceHandle(GetModuleHandle(MODULE_MANAGER_DLL_NAME)); //创建窗口 Create(m_lpszTemplateName, pParentWnd); SetWindowPos(NULL, rcRect.left, rcRect.top, rcRect.Width(), rcRect.Height(), SWP_NOZORDER | SWP_NOACTIVATE); //设置资源 AfxSetResourceHandle(GetModuleHandle(NULL)); } //显示窗口 ShowWindow(SW_SHOW); return true; } //确定函数 VOID CDlgServerOptionItem::OnOK() { //投递消息 m_pDlgServerWizard->PostMessage(WM_COMMAND, MAKELONG(IDOK, 0), 0); return; } //取消消息 VOID CDlgServerOptionItem::OnCancel() { //投递消息 m_pDlgServerWizard->PostMessage(WM_COMMAND, MAKELONG(IDCANCEL, 0), 0); return; } //位置消息 VOID CDlgServerOptionItem::OnSize(UINT nType, INT cx, INT cy) { __super::OnSize(nType, cx, cy); //调整控件 RectifyControl(cx, cy); return; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CDlgServerOptionItem1::CDlgServerOptionItem1() : CDlgServerOptionItem(IDD_SERVER_OPTION_1) { } //析构函数 CDlgServerOptionItem1::~CDlgServerOptionItem1() { } //初始化函数 BOOL CDlgServerOptionItem1::OnInitDialog() { __super::OnInitDialog(); //构造控件 InitCtrlWindow(); //变量定义 CComboBox * pServerType = (CComboBox *)GetDlgItem(IDC_SERVER_TYPE); ///---游戏类型(财富类型,点值类型,比赛类型,练习类型) CComboBox * pServerKind = (CComboBox *)GetDlgItem(IDC_SERVER_KIND); ///---房间类型(普通房间、密码房间) //房间名字 if (m_pGameServiceOption->szServerName[0] == 0) ///---如:黄石晃晃 { SetDlgItemText(IDC_SERVER_NAME, m_pGameServiceAttrib->szGameName); } else { SetDlgItemText(IDC_SERVER_NAME, m_pGameServiceOption->szServerName); } ///+++修改下桌子数目 if (0 == m_pGameServiceOption->wTableCount) { m_pGameServiceOption->wTableCount = 100; m_pGameServiceOption->wMaxPlayer = 400; } //桌子数目 if (m_pGameServiceOption->wTableCount != 0) { SetDlgItemInt(IDC_TABLE_COUNT, m_pGameServiceOption->wTableCount); } else if (m_pGameServiceAttrib->wChairCount >= MAX_CHAIR) { SetDlgItemInt(IDC_TABLE_COUNT, 1); } else { SetDlgItemInt(IDC_TABLE_COUNT, 60); } //服务端口 if (m_pGameServiceOption->wServerPort != 0) { SetDlgItemInt(IDC_SERVER_PORT, m_pGameServiceOption->wServerPort); } //数据库名 if (m_pGameServiceOption->szDataBaseName[0] != 0) { SetDlgItemText(IDC_DATABASE_NAME, m_pGameServiceOption->szDataBaseName); } else { SetDlgItemText(IDC_DATABASE_NAME, m_pGameServiceAttrib->szDataBaseName); } //连接地址 if (m_pGameServiceOption->szDataBaseAddr[0] != 0) { DWORD dwDataBaseAddr = inet_addr(CT2CA(m_pGameServiceOption->szDataBaseAddr)); ((CIPAddressCtrl *)GetDlgItem(IDC_DATABASE_ADDR))->SetAddress(htonl(dwDataBaseAddr)); } //游戏类型 for (INT i = 0; i < pServerType->GetCount(); i++) { if (pServerType->GetItemData(i) == m_pGameServiceOption->wServerType) { pServerType->SetCurSel(i); } } //房间密码 if (m_pGameServiceOption->wServerKind&SERVER_GENRE_PASSWD) { GetDlgItem(IDC_SERVER_PASSWD)->EnableWindow(true); SetDlgItemText(IDC_SERVER_PASSWD, m_pGameServiceOption->szServerPasswd); } else { GetDlgItem(IDC_SERVER_PASSWD)->EnableWindow(false); SetDlgItemText(IDC_SERVER_PASSWD, TEXT("")); } //房间类型 for (INT i = 0; i < pServerKind->GetCount(); i++) { if (pServerKind->GetItemData(i) == m_pGameServiceOption->wServerKind) { pServerKind->SetCurSel(i); } } //房间配置 if (m_pGameServiceOption->wServerType == GAME_GENRE_GOLD) ///---设置财富场的底分 { if (m_pGameServiceOption->lCellScore != 0) { SetDlgItemInt(IDC_CELL_SCORE, (LONG)m_pGameServiceOption->lCellScore); ///---游戏底分 } } if (m_pGameServiceOption->wMaxPlayer != 0) { SetDlgItemInt(IDC_MAX_PLAYER, (LONG)m_pGameServiceOption->wMaxPlayer); ///---房间最大人数 } if (m_pGameServiceOption->lRestrictScore != 0) { SetDlgItemInt(IDC_RESTRICT_SCORE, (LONG)m_pGameServiceOption->lRestrictScore); ///---每局封顶 } if (m_pGameServiceOption->wRevenueRatio != 0) { OnBnClickedRevenueRadio(); SetDlgItemInt(IDC_SERVICE_REVENUE, (LONG)m_pGameServiceOption->wRevenueRatio); ///---税收比例 ((CButton*)GetDlgItem(IDC_REVENUE_RADIO))->SetCheck(BST_CHECKED); ((CButton*)GetDlgItem(IDC_SERVICE_RADIO))->SetCheck(BST_UNCHECKED); } else if (m_pGameServiceOption->lServiceScore != 0) { OnBnClickedServiceRadio(); SetDlgItemInt(IDC_SERVICE_REVENUE, (LONG)m_pGameServiceOption->lServiceScore); ///---服务费数 ((CButton*)GetDlgItem(IDC_SERVICE_RADIO))->SetCheck(BST_CHECKED); ((CButton*)GetDlgItem(IDC_REVENUE_RADIO))->SetCheck(BST_UNCHECKED); } //百人游戏无底分配置 if (m_pGameServiceAttrib->wChairCount >= MAX_CHAIR) { GetDlgItem(IDC_CELL_SCORE)->EnableWindow(FALSE); ///---游戏底分 } //挂接配置 WORD wGameKindID = m_pGameServiceOption->wKindID; WORD wAttribKindID = m_pGameServiceAttrib->wKindID; ///+++disable GetDlgItem(IDC_NODE_ID)->EnableWindow(FALSE); GetDlgItem(IDC_SORT_ID)->EnableWindow(FALSE); GetDlgItem(IDC_KIND_ID)->EnableWindow(FALSE); if (m_pGameServiceOption->wNodeID != 0) { SetDlgItemInt(IDC_NODE_ID, m_pGameServiceOption->wNodeID); ///---挂接节点 ///金币场时,作为场馆ID用 } if (m_pGameServiceOption->wSortID != 0) { SetDlgItemInt(IDC_SORT_ID, m_pGameServiceOption->wSortID); ///---排序标识 } if ((wGameKindID != 0) && (wGameKindID != wAttribKindID)) { SetDlgItemInt(IDC_KIND_ID, m_pGameServiceOption->wKindID); ///---挂接类型 } //默认选择 if (pServerType->GetCurSel() == LB_ERR) { //获取名字 TCHAR szDataBase[32] = TEXT(""); GetDlgItemText(IDC_DATABASE_NAME, szDataBase, CountArray(szDataBase)); ///---数据库名字 //变量定义 WORD wServerType = 0; bool bGoldDataBase = (lstrcmpi(szDataBase, szTreasureDB) == 0); bool bDefaultDataBase = (lstrcmpi(szDataBase, m_pGameServiceAttrib->szDataBaseName) == 0); //类型定义 if ((wServerType == 0) && (bGoldDataBase == true)) { wServerType = GAME_GENRE_GOLD; } if ((wServerType == 0) && (bGoldDataBase == false) && (bDefaultDataBase == true)) { wServerType = GAME_GENRE_SCORE; } //分析类型 if ((m_pGameServiceAttrib->wSupporType&wServerType) != 0L) { for (INT i = 0; i < pServerType->GetCount(); i++) { if (pServerType->GetItemData(i) == wServerType) { pServerType->SetCurSel(i); break; } } } } return TRUE; } //保存输入 bool CDlgServerOptionItem1::SaveInputInfo() { //变量定义 ///---下拉列表框 CComboBox * pServerType = (CComboBox *)GetDlgItem(IDC_SERVER_TYPE); ///---房间类型 (普通房间、密码房间) CComboBox * pServerKind = (CComboBox *)GetDlgItem(IDC_SERVER_KIND); ///---游戏类型(财富类型,点值类型,比赛类型,练习类型) CComboBox * pVenueType = (CComboBox *)GetDlgItem(IDC_VENUE_TYPE); ///---场馆ID CIPAddressCtrl * pIPAddressCtrl = (CIPAddressCtrl *)GetDlgItem(IDC_DATABASE_ADDR); ///---数据库地址 //挂接属性 m_pGameServiceOption->wKindID = GetDlgItemInt(IDC_KIND_ID); m_pGameServiceOption->wNodeID = GetDlgItemInt(IDC_NODE_ID); ///---对应金币场ID**** m_pGameServiceOption->wSortID = GetDlgItemInt(IDC_SORT_ID); //属性配置 m_pGameServiceOption->lCellScore = GetDlgItemInt(IDC_CELL_SCORE); ///---游戏底分, 这个值从Venue表配置中读取 m_pGameServiceOption->lMinEnterScore = GetDlgItemInt(IDC_MIN_SCORE); ///---下限******* m_pGameServiceOption->lMaxEnterScore = GetDlgItemInt(IDC_MAX_SCORE); ///---上限******* m_pGameServiceOption->lRestrictScore = GetDlgItemInt(IDC_RESTRICT_SCORE); if (((CButton*)GetDlgItem(IDC_REVENUE_RADIO))->GetCheck() == BST_CHECKED) { m_pGameServiceOption->wRevenueRatio = GetDlgItemInt(IDC_SERVICE_REVENUE); m_pGameServiceOption->lServiceScore = 0L; } else { m_pGameServiceOption->lServiceScore = GetDlgItemInt(IDC_SERVICE_REVENUE); m_pGameServiceOption->wRevenueRatio = 0L; } //选择控件 m_pGameServiceOption->wServerType = (WORD)pServerType->GetItemData(pServerType->GetCurSel()); m_pGameServiceOption->wServerKind = (WORD)pServerKind->GetItemData(pServerKind->GetCurSel()); if (GAME_GENRE_SCORE == m_pGameServiceOption->wServerType && pVenueType->GetCurSel() >= 0) { m_pGameServiceOption->wNodeID = pVenueType->GetItemData(pVenueType->GetCurSel()); ///---场id } else { m_pGameServiceOption->wNodeID = 0; ///非金币场,无场馆ID } //房间属性 m_pGameServiceOption->wTableCount = GetDlgItemInt(IDC_TABLE_COUNT); m_pGameServiceOption->wServerPort = GetDlgItemInt(IDC_SERVER_PORT); m_pGameServiceOption->wMaxPlayer = GetDlgItemInt(IDC_MAX_PLAYER); GetDlgItemText(IDC_SERVER_NAME, m_pGameServiceOption->szServerName, CountArray(m_pGameServiceOption->szServerName)); GetDlgItemText(IDC_DATABASE_NAME, m_pGameServiceOption->szDataBaseName, CountArray(m_pGameServiceOption->szDataBaseName)); GetDlgItemText(IDC_SERVER_PASSWD, m_pGameServiceOption->szServerPasswd, CountArray(m_pGameServiceOption->szServerPasswd)); //连接地址 DWORD dwDataBaseAddr = INADDR_NONE; pIPAddressCtrl->GetAddress(dwDataBaseAddr); _sntprintf(m_pGameServiceOption->szDataBaseAddr, CountArray(m_pGameServiceOption->szDataBaseAddr), TEXT("%d.%d.%d.%d"), *(((BYTE *)&dwDataBaseAddr) + 3), *(((BYTE *)&dwDataBaseAddr) + 2), *(((BYTE *)&dwDataBaseAddr) + 1), *((BYTE *)&dwDataBaseAddr)); //房间名字 if (m_pGameServiceOption->szServerName[0] == 0) { AfxMessageBox(TEXT("游戏房间名字不能为空,请输入游戏房间名字"), MB_ICONERROR); return false; } ///+++如果是金币场增加场馆名称信息(如:黄石晃晃--菜鸟场) if (m_pGameServiceOption->wNodeID > 0) { tagVenueInfo venue = GetVenue(m_pGameServiceOption->wNodeID); lstrcat(m_pGameServiceOption->szServerName, L" -- "); lstrcat(m_pGameServiceOption->szServerName, venue.szVenuName); } //类别判断 if ((m_pGameServiceOption->wServerKind&SERVER_GENRE_PASSWD) != 0 && (m_pGameServiceOption->szServerPasswd[0] == 0)) { AfxMessageBox(TEXT("游戏房间密码不能为空,请输入游戏房间密码"), MB_ICONERROR); return false; } //类型判断 if (m_pGameServiceOption->wServerType == 0) { AfxMessageBox(TEXT("游戏房间类型不能为空,请重新选择游戏房间类型"), MB_ICONERROR); return false; } //数据库名 if (m_pGameServiceOption->szDataBaseName[0] == 0) { AfxMessageBox(TEXT("游戏数据库名不能为空,请输入游戏数据库名"), MB_ICONERROR); return false; } //连接地址 if (INVALID_IP_ADDRESS(dwDataBaseAddr)) { AfxMessageBox(TEXT("游戏数据库地址格式不正确,请重新输入游戏数据库地址"), MB_ICONERROR); return false; } //桌子数目 if ((m_pGameServiceOption->wTableCount == 0) || (m_pGameServiceOption->wTableCount > MAX_TABLE)) { AfxMessageBox(TEXT("游戏桌子数目无效,请重新输入游戏桌子数目,有效数值范围为 1 - 512"), MB_ICONERROR); return false; } return true; } //调整控件 VOID CDlgServerOptionItem1::RectifyControl(INT nWidth, INT nHeight) { return; } //构造控件 VOID CDlgServerOptionItem1::InitCtrlWindow() { //列表配置 ((CEdit *)GetDlgItem(IDC_KIND_ID))->LimitText(5); ((CEdit *)GetDlgItem(IDC_NODE_ID))->LimitText(5); ((CEdit *)GetDlgItem(IDC_SORT_ID))->LimitText(5); //属性配置 ((CEdit *)GetDlgItem(IDC_MAX_PLAYER))->LimitText(5); ((CEdit *)GetDlgItem(IDC_CELL_SCORE))->LimitText(6); ((CEdit *)GetDlgItem(IDC_SERVICE_REVENUE))->LimitText(3); ((CButton*)GetDlgItem(IDC_REVENUE_RADIO))->SetCheck(BST_CHECKED); //常规配置 ((CEdit *)GetDlgItem(IDC_TABLE_COUNT))->LimitText(5); ((CEdit *)GetDlgItem(IDC_SERVER_PORT))->LimitText(5); ((CEdit *)GetDlgItem(IDC_SERVER_NAME))->LimitText(31); ((CEdit *)GetDlgItem(IDC_DATABASE_NAME))->LimitText(31); //变量定义 CComboBox * pComboBox = (CComboBox *)GetDlgItem(IDC_SERVER_TYPE); WORD wServerType[4] = { GAME_GENRE_GOLD, GAME_GENRE_SCORE, GAME_GENRE_MATCH, GAME_GENRE_EDUCATE }; LPCTSTR pszServerType[4] = { TEXT("财富类型"), TEXT("金币场类型")/*TEXT("点值类型")*/, TEXT("比赛类型"), TEXT("练习类型") }; //构造类型 for (INT i = 0; i < CountArray(wServerType) - 2/*后面两个暂不支持*/; i++) { if ((m_pGameServiceAttrib->wSupporType&wServerType[i]) == 0) continue; pComboBox->SetItemData(pComboBox->AddString(pszServerType[i]), wServerType[i]); } //变量定义 pComboBox = (CComboBox *)GetDlgItem(IDC_SERVER_KIND); WORD wServerKind[2] = { SERVER_GENRE_NORMAL, SERVER_GENRE_PASSWD }; LPCTSTR pszServerKind[2] = { TEXT("普通房间"), TEXT("密码房间") }; //构造类型 for (INT i = 0; i < CountArray(wServerKind); i++) { pComboBox->SetItemData(pComboBox->InsertString(i, pszServerKind[i]), wServerKind[i]); } if (pComboBox->GetCurSel() == LB_ERR) pComboBox->SetCurSel(0); //场馆类型 pComboBox = (CComboBox *)GetDlgItem(IDC_VENUE_TYPE); ///---加载该游戏的场馆配置 CServerInfoManager svrInfoManager; svrInfoManager.LoadVenueInfos(m_pGameServiceAttrib->wKindID, m_vecVenueInfo); int curVenueSel = -1; for (INT i = 0; i < m_vecVenueInfo.size(); i++) { pComboBox->SetItemData(pComboBox->InsertString(i, m_vecVenueInfo[i].szVenuName), m_vecVenueInfo[i].wVenueID); if (m_pGameServiceOption->wNodeID == m_vecVenueInfo[i].wVenueID) { curVenueSel = i; } } ///---金币场 if (m_pGameServiceOption->wServerType == GAME_GENRE_SCORE) { pComboBox->SetCurSel(curVenueSel); OnSelchangeVenueType(); GetDlgItem(IDC_VENUE_TYPE)->EnableWindow(true); GetDlgItem(IDC_STATIC_VENUE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_VENUE_TYPE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC_MINSCORE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_MIN_SCORE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC_MAXSCORE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_MAX_SCORE)->ShowWindow(SW_SHOW); } else { GetDlgItem(IDC_VENUE_TYPE)->EnableWindow(false); SetDlgItemText(IDC_CELL_SCORE, TEXT("")); SetDlgItemText(IDC_MIN_SCORE, TEXT("")); GetDlgItem(IDC_STATIC_VENUE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_VENUE_TYPE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_MINSCORE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_MIN_SCORE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_MAXSCORE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_MAX_SCORE)->ShowWindow(SW_HIDE); } GetDlgItem(IDC_MIN_SCORE)->EnableWindow(false); GetDlgItem(IDC_MAX_SCORE)->EnableWindow(false); return; } //更新数据 VOID CDlgServerOptionItem1::UpdateDataBaseName() { //变量定义 CComboBox * pServerType = (CComboBox *)GetDlgItem(IDC_SERVER_TYPE); GetDlgItem(IDC_VENUE_TYPE)->EnableWindow(false); CComboBox * pVenueComboBox = (CComboBox *)GetDlgItem(IDC_VENUE_TYPE); GetDlgItem(IDC_STATIC_VENUE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_VENUE_TYPE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC_MINSCORE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_MIN_SCORE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC_MAXSCORE)->ShowWindow(SW_SHOW); GetDlgItem(IDC_MAX_SCORE)->ShowWindow(SW_SHOW); //数据调整 switch ((WORD)pServerType->GetItemData(pServerType->GetCurSel())) { case GAME_GENRE_GOLD: //财富类型 { SetDlgItemText(IDC_DATABASE_NAME, szTreasureDB); SetDlgItemInt(IDC_CELL_SCORE, (LONG)m_pGameServiceOption->lCellScore); SetDlgItemText(IDC_MIN_SCORE, TEXT("")); SetDlgItemText(IDC_MAX_SCORE, TEXT("")); pVenueComboBox->SetCurSel(-1); GetDlgItem(IDC_STATIC_VENUE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_VENUE_TYPE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_MINSCORE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_MIN_SCORE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_MAXSCORE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_MAX_SCORE)->ShowWindow(SW_HIDE); break; } case GAME_GENRE_SCORE: //点值类型 { //还没有配置金币场的场馆信息 if (m_vecVenueInfo.size() <= 0) { AfxMessageBox(TEXT("还没有配置该玩法的场馆的信息,请前往配置表[Venue]"), MB_ICONERROR); CComboBox * pServerType = (CComboBox *)GetDlgItem(IDC_SERVER_TYPE); pServerType->SetCurSel(0); return; } SetDlgItemText(IDC_DATABASE_NAME, szTreasureDB/*m_pGameServiceAttrib->szDataBaseName*/); GetDlgItem(IDC_VENUE_TYPE)->EnableWindow(true); pVenueComboBox->SetCurSel(0); OnSelchangeVenueType(); break; } case GAME_GENRE_MATCH: //比赛类型 { SetDlgItemText(IDC_DATABASE_NAME, szGameMatchDB); SetDlgItemInt(IDC_CELL_SCORE, (LONG)m_pGameServiceOption->lCellScore); SetDlgItemText(IDC_MIN_SCORE, TEXT("")); SetDlgItemText(IDC_MAX_SCORE, TEXT("")); pVenueComboBox->SetCurSel(-1); break; } default: { SetDlgItemInt(IDC_CELL_SCORE, (LONG)m_pGameServiceOption->lCellScore); SetDlgItemText(IDC_MIN_SCORE, TEXT("")); SetDlgItemText(IDC_MAX_SCORE, TEXT("")); pVenueComboBox->SetCurSel(-1); //获取名字 TCHAR szDataBase[32] = TEXT(""); GetDlgItemText(IDC_DATABASE_NAME, szDataBase, CountArray(szDataBase)); //名字判断 if (lstrcmpi(szDataBase, szTreasureDB) == 0) { SetDlgItemText(IDC_DATABASE_NAME, TEXT("")); } if (lstrcmpi(szDataBase, m_pGameServiceAttrib->szDataBaseName) == 0) { SetDlgItemText(IDC_DATABASE_NAME, TEXT("")); } break; } } return; } //选择改变 VOID CDlgServerOptionItem1::OnSelchangeServerType() { //更新数据 UpdateDataBaseName(); return; } //选择改变 VOID CDlgServerOptionItem1::OnSelchangeServerKind() { //变量定义 CComboBox * pServerKind = (CComboBox *)GetDlgItem(IDC_SERVER_KIND); //数据调整 int nCurSelIndex = pServerKind->GetCurSel(); switch (pServerKind->GetItemData(nCurSelIndex)) { case SERVER_GENRE_NORMAL: //普通房间 { GetDlgItem(IDC_SERVER_PASSWD)->EnableWindow(false); break; } case SERVER_GENRE_PASSWD: //密码类型 { GetDlgItem(IDC_SERVER_PASSWD)->EnableWindow(true); break; } } return; } tagVenueInfo& CDlgServerOptionItem1::GetVenue(WORD wVenueID) { for (std::vector::iterator it = m_vecVenueInfo.begin(); it != m_vecVenueInfo.end(); it++) { if (it->wVenueID == wVenueID) { return *it; } } } VOID CDlgServerOptionItem1::OnSelchangeVenueType() { //变量定义 CComboBox * pVenueType = (CComboBox *)GetDlgItem(IDC_VENUE_TYPE); //数据调整 int nCurSelIndex = pVenueType->GetCurSel(); int venueID = pVenueType->GetItemData(nCurSelIndex); ///保存下 m_pGameServiceOption->wNodeID = venueID; std::vector::iterator it = m_vecVenueInfo.begin(); while (it != m_vecVenueInfo.end()) { if (it->wVenueID == venueID) { SetDlgItemInt(IDC_CELL_SCORE, it->sBaseScore); SetDlgItemInt(IDC_MIN_SCORE, it->sMinScore); SetDlgItemInt(IDC_MAX_SCORE, it->sMaxScore); break; } it++; } } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CDlgServerOptionItem2::CDlgServerOptionItem2() : CDlgServerOptionItem(IDD_SERVER_OPTION_2) { } //析构函数 CDlgServerOptionItem2::~CDlgServerOptionItem2() { } //初始化函数 ///---房间选项 BOOL CDlgServerOptionItem2::OnInitDialog() { __super::OnInitDialog(); //构造控件 InitCtrlWindow(); //变量定义 CComboBox * pMinMember = (CComboBox *)GetDlgItem(IDC_MIN_ENTER_MEMBER); ///---进入房间最低成绩 CComboBox * pMaxMember = (CComboBox *)GetDlgItem(IDC_MAX_ENTER_MEMBER); ///---进入房间最高成绩 //房间配置 if (m_pGameServiceOption->lMinEnterScore != 0) SetDlgItemInt(IDC_MIN_ENTER_SCORE, (LONG)m_pGameServiceOption->lMinEnterScore); if (m_pGameServiceOption->lMaxEnterScore != 0) SetDlgItemInt(IDC_MAX_ENTER_SCORE, (LONG)m_pGameServiceOption->lMaxEnterScore); if (m_pGameServiceOption->lMinTableScore != 0) SetDlgItemInt(IDC_MIN_TABLE_SCORE, (LONG)m_pGameServiceOption->lMinTableScore); ///---坐下游戏的最低成绩 //会员限制 //if (m_pGameServiceOption->cbMaxEnterMember!=0) { //最低会员 for (INT i = 0; i < pMinMember->GetCount(); i++) { if (pMinMember->GetItemData(i) == m_pGameServiceOption->cbMinEnterMember) { pMinMember->SetCurSel(i); break; } } //最高会员 for (INT i = 0; i < pMaxMember->GetCount(); i++) { if (pMaxMember->GetItemData(i) == m_pGameServiceOption->cbMaxEnterMember) { pMaxMember->SetCurSel(i); break; } } } //禁止公聊 bool bForfendGameChat = CServerRule::IsForfendGameChat(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_GAME_CHAT))->SetCheck((bForfendGameChat == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止公聊 bool bForfendRoomChat = CServerRule::IsForfendRoomChat(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_ROOM_CHAT))->SetCheck((bForfendRoomChat == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止私聊 bool bForfendWisperChat = CServerRule::IsForfendWisperChat(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_WISPER_CHAT))->SetCheck((bForfendWisperChat == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止私聊 bool bForfendWisperOnGame = CServerRule::IsForfendWisperOnGame(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_WISPER_ON_GAME))->SetCheck((bForfendWisperOnGame == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止进入 bool bForfendRoomEnter = CServerRule::IsForfendRoomEnter(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_ROOM_ENTER))->SetCheck((bForfendRoomEnter == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止进入 bool bForfendGameEnter = CServerRule::IsForfendGameEnter(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_GAME_ENTER))->SetCheck((bForfendGameEnter == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止旁观 bool bForfendGameLookon = CServerRule::IsForfendGameLookon(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_GAME_LOOKON))->SetCheck((bForfendGameLookon == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止规则 if (m_pGameServiceAttrib->wChairCount > MAX_CHAIR_GENERAL) CServerRule::SetForfendGameRule(m_pGameServiceOption->dwServerRule, true); if (m_pGameServiceAttrib->wChairCount > MAX_CHAIR_GENERAL) ((CButton *)GetDlgItem(IDC_FORFEND_GAME_RULE))->EnableWindow(FALSE); bool bForfendGameRule = CServerRule::IsForfendGameRule(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_GAME_RULE))->SetCheck((bForfendGameRule == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止锁桌 if (m_pGameServiceAttrib->wChairCount > MAX_CHAIR_GENERAL) CServerRule::SetForfendLockTable(m_pGameServiceOption->dwServerRule, true); if (m_pGameServiceAttrib->wChairCount > MAX_CHAIR_GENERAL) ((CButton *)GetDlgItem(IDC_FORFEND_LOCK_TABLE))->EnableWindow(FALSE); bool bForfendLockTable = CServerRule::IsForfendLockTable(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_LOCK_TABLE))->SetCheck((bForfendLockTable == TRUE) ? BST_CHECKED : BST_UNCHECKED); //记录积分 bool bRecordGameScore = CServerRule::IsRecordGameScore(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_RECORD_GAME_SCORE))->SetCheck((bRecordGameScore == TRUE) ? BST_CHECKED : BST_UNCHECKED); //记录过程 //bool bRecordGameTrack=CServerRule::IsRecordGameTrack(m_pGameServiceOption->dwServerRule); //((CButton *)GetDlgItem(IDC_RECORD_GAME_TRACK))->SetCheck((bRecordGameTrack==TRUE)?BST_CHECKED:BST_UNCHECKED); ((CButton *)GetDlgItem(IDC_RECORD_GAME_TRACK))->SetCheck(BST_UNCHECKED); ((CButton *)GetDlgItem(IDC_RECORD_GAME_TRACK))->EnableWindow(FALSE); //所有财富游戏,每局即时写分,记录每局成绩,默认为直接勾选灰色状态 if (m_pGameServiceOption->wServerType == GAME_GENRE_GOLD) { CServerRule::SetImmediateWriteScore(m_pGameServiceOption->dwServerRule, true); GetDlgItem(IDC_IMMEDIATE_WRITE_SCORE)->EnableWindow(FALSE); } //即时写分 bool bImmediateWriteScore = CServerRule::IsImmediateWriteScore(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_IMMEDIATE_WRITE_SCORE))->SetCheck((bImmediateWriteScore == TRUE) ? BST_CHECKED : BST_UNCHECKED); //动态底分 //bool bDynamicCellScore=CServerRule::IsDynamicCellScore(m_pGameServiceOption->dwServerRule); //((CButton *)GetDlgItem(IDC_DYNAMIC_CELL_SCORE))->SetCheck((bDynamicCellScore==TRUE)?BST_CHECKED:BST_UNCHECKED); ((CButton *)GetDlgItem(IDC_DYNAMIC_CELL_SCORE))->SetCheck(BST_UNCHECKED); ((CButton *)GetDlgItem(IDC_DYNAMIC_CELL_SCORE))->EnableWindow(FALSE); //隐藏信息 bool bAllowAvertCheatMode = CServerRule::IsAllowAvertCheatMode(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_ALLOW_AVERT_CHEAT_MODE))->SetCheck((bAllowAvertCheatMode == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止存钱 bool bForfendSaveInRoom = CServerRule::IsForfendSaveInRoom(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_SAVE_IN_ROOM))->SetCheck((bForfendSaveInRoom == TRUE) ? BST_CHECKED : BST_UNCHECKED); //禁止存钱 bool bForfendSaveInGame = CServerRule::IsForfendSaveInGame(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_FORFEND_SAVE_IN_GAME))->SetCheck((bForfendSaveInGame == TRUE) ? BST_CHECKED : BST_UNCHECKED); //允许占位 bool bAllowAndroidSimulate = CServerRule::IsAllowAndroidSimulate(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_ALLOW_ANDROID_SIMULATE))->SetCheck((bAllowAndroidSimulate == TRUE) ? BST_CHECKED : BST_UNCHECKED); //动态加入 if (m_pGameServiceAttrib->cbDynamicJoin == TRUE) { bool bAllowDynamicJoin = CServerRule::IsAllowDynamicJoin(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_ALLOW_DYNAMIC_JOIN))->SetCheck((bAllowDynamicJoin == TRUE) ? BST_CHECKED : BST_UNCHECKED); } //允许机器 if (m_pGameServiceAttrib->cbAndroidUser == TRUE) { bool bAllowAndroidAttend = CServerRule::IsAllowAndroidAttend(m_pGameServiceOption->dwServerRule); ((CButton *)GetDlgItem(IDC_ALLOW_ANDROID_ATTEND))->SetCheck((bAllowAndroidAttend == TRUE) ? BST_CHECKED : BST_UNCHECKED); } //断线代打 if (m_pGameServiceAttrib->cbOffLineTrustee == TRUE) { bool bAllowOffLineTrustee = CServerRule::IsAllowOffLineTrustee(m_pGameServiceOption->dwServerRule); if (m_pGameServiceOption->wServerType != GAME_GENRE_MATCH) ((CButton *)GetDlgItem(IDC_ALLOW_OFFLINE_TRUSTEE))->SetCheck((bAllowOffLineTrustee == TRUE) ? BST_CHECKED : BST_UNCHECKED); else ((CButton *)GetDlgItem(IDC_ALLOW_OFFLINE_TRUSTEE))->SetCheck(BST_CHECKED); } //((CButton *)GetDlgItem(IDC_ALLOW_OFFLINE_TRUSTEE))->SetCheck(BST_UNCHECKED); //((CButton *)GetDlgItem(IDC_ALLOW_OFFLINE_TRUSTEE))->EnableWindow(FALSE); return TRUE; } //保存输入 bool CDlgServerOptionItem2::SaveInputInfo() { //变量定义 CComboBox * pMinMember = (CComboBox *)GetDlgItem(IDC_MIN_ENTER_MEMBER); CComboBox * pMaxMember = (CComboBox *)GetDlgItem(IDC_MAX_ENTER_MEMBER); //积分限制 m_pGameServiceOption->cbMinEnterMember = 0; m_pGameServiceOption->cbMaxEnterMember = 0; m_pGameServiceOption->lMinEnterScore = GetDlgItemInt(IDC_MIN_ENTER_SCORE); m_pGameServiceOption->lMaxEnterScore = GetDlgItemInt(IDC_MAX_ENTER_SCORE); m_pGameServiceOption->lMinTableScore = GetDlgItemInt(IDC_MIN_TABLE_SCORE); //会员限制 if (pMinMember->GetCurSel() != LB_ERR) { INT nCurSelect = pMinMember->GetCurSel(); m_pGameServiceOption->cbMinEnterMember = (BYTE)pMinMember->GetItemData(nCurSelect); } //最高会员 if (pMaxMember->GetCurSel() != LB_ERR) { INT nCurSelect = pMaxMember->GetCurSel(); m_pGameServiceOption->cbMaxEnterMember = (BYTE)pMaxMember->GetItemData(nCurSelect); } //参数效验 if ((m_pGameServiceOption->lMaxEnterScore != 0L) && (m_pGameServiceOption->lMaxEnterScore < m_pGameServiceOption->lMinEnterScore)) { AfxMessageBox(TEXT("进入房间最低成绩比最高成绩还高,将会造成任何玩家都不能进入"), MB_ICONERROR); return false; } //参数效验 if ((m_pGameServiceOption->cbMaxEnterMember != 0L) && (m_pGameServiceOption->cbMaxEnterMember < m_pGameServiceOption->cbMinEnterMember)) { AfxMessageBox(TEXT("进入房间最低会员级别比最高会员级别还高,将会造成任何玩家都不能进入"), MB_ICONERROR); return false; } //禁止公聊 CButton * pForfendGameChat = (CButton *)GetDlgItem(IDC_FORFEND_GAME_CHAT); CServerRule::SetForfendGameChat(m_pGameServiceOption->dwServerRule, (pForfendGameChat->GetCheck() == BST_CHECKED)); //禁止公聊 CButton * pForfendRoomChat = (CButton *)GetDlgItem(IDC_FORFEND_ROOM_CHAT); CServerRule::SetForfendRoomChat(m_pGameServiceOption->dwServerRule, (pForfendRoomChat->GetCheck() == BST_CHECKED)); //禁止私聊 CButton * pForfendWisperChat = (CButton *)GetDlgItem(IDC_FORFEND_WISPER_CHAT); CServerRule::SetForfendWisperChat(m_pGameServiceOption->dwServerRule, (pForfendWisperChat->GetCheck() == BST_CHECKED)); //禁止私聊 CButton * pForfendWisperOnGame = (CButton *)GetDlgItem(IDC_FORFEND_WISPER_ON_GAME); CServerRule::SetForfendWisperOnGame(m_pGameServiceOption->dwServerRule, (pForfendWisperOnGame->GetCheck() == BST_CHECKED)); //禁止进入 CButton * pForfendRoomEnter = (CButton *)GetDlgItem(IDC_FORFEND_ROOM_ENTER); CServerRule::SetForfendRoomEnter(m_pGameServiceOption->dwServerRule, (pForfendRoomEnter->GetCheck() == BST_CHECKED)); //禁止进入 CButton * pForfendGameEnter = (CButton *)GetDlgItem(IDC_FORFEND_GAME_ENTER); CServerRule::SetForfendGameEnter(m_pGameServiceOption->dwServerRule, (pForfendGameEnter->GetCheck() == BST_CHECKED)); //禁止旁观 CButton * pForfendGameLookon = (CButton *)GetDlgItem(IDC_FORFEND_GAME_LOOKON); CServerRule::SetForfendGameLookon(m_pGameServiceOption->dwServerRule, (pForfendGameLookon->GetCheck() == BST_CHECKED)); //禁止规则 CButton * pForfendGameRule = (CButton *)GetDlgItem(IDC_FORFEND_GAME_RULE); CServerRule::SetForfendGameRule(m_pGameServiceOption->dwServerRule, (pForfendGameRule->GetCheck() == BST_CHECKED)); //禁止锁桌 CButton * pForfendLockTable = (CButton *)GetDlgItem(IDC_FORFEND_LOCK_TABLE); CServerRule::SetForfendLockTable(m_pGameServiceOption->dwServerRule, (pForfendLockTable->GetCheck() == BST_CHECKED)); //记录积分 CButton * pRecordGameScore = (CButton *)GetDlgItem(IDC_RECORD_GAME_SCORE); CServerRule::SetRecordGameScore(m_pGameServiceOption->dwServerRule, (pRecordGameScore->GetCheck() == BST_CHECKED)); //记录过程 CButton * pRecordGameTrack = (CButton *)GetDlgItem(IDC_RECORD_GAME_TRACK); CServerRule::SetRecordGameTrack(m_pGameServiceOption->dwServerRule, (pRecordGameTrack->GetCheck() == BST_CHECKED)); //即时写分 CButton * pImmediateWriteScore = (CButton *)GetDlgItem(IDC_IMMEDIATE_WRITE_SCORE); CServerRule::SetImmediateWriteScore(m_pGameServiceOption->dwServerRule, (pImmediateWriteScore->GetCheck() == BST_CHECKED)); //动态底分 CButton * pDynamicCellScore = (CButton *)GetDlgItem(IDC_DYNAMIC_CELL_SCORE); CServerRule::SetDynamicCellScore(m_pGameServiceOption->dwServerRule, (pDynamicCellScore->GetCheck() == BST_CHECKED)); //隐藏信息 CButton * pAvertCheatMode = (CButton *)GetDlgItem(IDC_ALLOW_AVERT_CHEAT_MODE); CServerRule::SetAllowAvertCheatMode(m_pGameServiceOption->dwServerRule, (pAvertCheatMode->GetCheck() == BST_CHECKED)); //禁止存钱 CButton * pForfendSaveInRoom = (CButton *)GetDlgItem(IDC_FORFEND_SAVE_IN_ROOM); CServerRule::SetForfendSaveInRoom(m_pGameServiceOption->dwServerRule, (pForfendSaveInRoom->GetCheck() == BST_CHECKED)); //禁止存钱 CButton * pForfendSaveInGame = (CButton *)GetDlgItem(IDC_FORFEND_SAVE_IN_GAME); CServerRule::SetForfendSaveInGame(m_pGameServiceOption->dwServerRule, (pForfendSaveInGame->GetCheck() == BST_CHECKED)); //允许占位 CButton * pAllowAndroidSimulate = (CButton *)GetDlgItem(IDC_ALLOW_ANDROID_SIMULATE); CServerRule::SetAllowAndroidSimulate(m_pGameServiceOption->dwServerRule, (pAllowAndroidSimulate->GetCheck() == BST_CHECKED)); //动态加入 if (m_pGameServiceAttrib->cbDynamicJoin == TRUE) { CButton * pAllowDynamicJoin = (CButton *)GetDlgItem(IDC_ALLOW_DYNAMIC_JOIN); CServerRule::SetAllowDynamicJoin(m_pGameServiceOption->dwServerRule, (pAllowDynamicJoin->GetCheck() == BST_CHECKED)); } //允许陪玩 if (m_pGameServiceAttrib->cbAndroidUser == TRUE) { CButton * pAllowAndroidUser = (CButton *)GetDlgItem(IDC_ALLOW_ANDROID_ATTEND); CServerRule::SetAllowAndroidAttend(m_pGameServiceOption->dwServerRule, (pAllowAndroidUser->GetCheck() == BST_CHECKED)); } //断线代打 if (m_pGameServiceAttrib->cbOffLineTrustee == TRUE) { CButton * pAllowOffLineTrustee = (CButton *)GetDlgItem(IDC_ALLOW_OFFLINE_TRUSTEE); CServerRule::SetAllowOffLineTrustee(m_pGameServiceOption->dwServerRule, (pAllowOffLineTrustee->GetCheck() == BST_CHECKED)); } return true; } //调整控件 VOID CDlgServerOptionItem2::RectifyControl(INT nWidth, INT nHeight) { return; } //构造控件 VOID CDlgServerOptionItem2::InitCtrlWindow() { //条件限制 ((CEdit *)GetDlgItem(IDC_MIN_ENTER_SCORE))->LimitText(18); ((CEdit *)GetDlgItem(IDC_MAX_ENTER_SCORE))->LimitText(18); ((CEdit *)GetDlgItem(IDC_MIN_TABLE_SCORE))->LimitText(18); //会员配置 CComboBox * pMinMember = (CComboBox *)GetDlgItem(IDC_MIN_ENTER_MEMBER); CComboBox * pMaxMember = (CComboBox *)GetDlgItem(IDC_MAX_ENTER_MEMBER); LPCTSTR pszMember[] = { TEXT("没有限制"), TEXT("蓝钻会员"), TEXT("黄钻会员"), TEXT("白钻会员"), TEXT("红钻会员"), TEXT("VIP会员") }; //会员信息 for (INT i = 0; i < CountArray(pszMember); i++) { pMinMember->SetItemData(pMinMember->AddString(pszMember[i]), i); pMaxMember->SetItemData(pMaxMember->AddString(pszMember[i]), i); } //控件禁用 GetDlgItem(IDC_ALLOW_DYNAMIC_JOIN)->EnableWindow((m_pGameServiceAttrib->cbDynamicJoin == TRUE) ? TRUE : FALSE); ///---允许动态加入 GetDlgItem(IDC_ALLOW_ANDROID_ATTEND)->EnableWindow((m_pGameServiceAttrib->cbAndroidUser == TRUE) ? TRUE : FALSE); ///---允许机器人陪玩 GetDlgItem(IDC_ALLOW_OFFLINE_TRUSTEE)->EnableWindow((m_pGameServiceAttrib->cbOffLineTrustee == TRUE) ? TRUE : FALSE);///---断线托管代打 return; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CDlgServerOptionItem3::CDlgServerOptionItem3() : CDlgServerOptionItem(IDD_SERVER_OPTION_3) { } //析构函数 CDlgServerOptionItem3::~CDlgServerOptionItem3() { } //初始化函数 ///---分组选项 BOOL CDlgServerOptionItem3::OnInitDialog() { __super::OnInitDialog(); //最少人数 if (m_pGameServiceOption->wMinDistributeUser != 0) { SetDlgItemInt(IDC_MIN_DISTRIBUTE_USER, m_pGameServiceOption->wMinDistributeUser); } //分组间隔 if (m_pGameServiceOption->wDistributeTimeSpace != 0) { SetDlgItemInt(IDC_DISTRIBUTE_TIME_SPACE, m_pGameServiceOption->wDistributeTimeSpace); } //分组局数 if (m_pGameServiceOption->wDistributeDrawCount != 0) { SetDlgItemInt(IDC_DISTRIBUTE_DRAW_COUNT, m_pGameServiceOption->wDistributeDrawCount); } //最少人数 if (m_pGameServiceOption->wMinPartakeGameUser != 0) { SetDlgItemInt(IDC_DISTRIBUTE_START_MIN_USER, m_pGameServiceOption->wMinPartakeGameUser); } //最大人数 if (m_pGameServiceOption->wMaxPartakeGameUser != 0) { SetDlgItemInt(IDC_DISTRIBUTE_START_MAX_USER, m_pGameServiceOption->wMaxPartakeGameUser); } //允许分组 bool bDistributeAllow = ((m_pGameServiceOption->cbDistributeRule&DISTRIBUTE_ALLOW) != 0); ((CButton *)GetDlgItem(IDC_DISTRIBUTE_ALLOW))->SetCheck((bDistributeAllow == TRUE) ? BST_CHECKED : BST_UNCHECKED); //入座选项 bool bDistributeImmediate = ((m_pGameServiceOption->cbDistributeRule&DISTRIBUTE_IMMEDIATE) != 0); ((CButton *)GetDlgItem(IDC_DISTRIBUTE_IMMEDIATE))->SetCheck((bDistributeImmediate == TRUE) ? BST_CHECKED : BST_UNCHECKED); //同桌选项 bool bDistributeLastTable = ((m_pGameServiceOption->cbDistributeRule&DISTRIBUTE_LAST_TABLE) != 0); ((CButton *)GetDlgItem(IDC_DISTRIBUTE_LAST_TABLE))->SetCheck((bDistributeLastTable == TRUE) ? BST_CHECKED : BST_UNCHECKED); //地址选项 bool bDistributeSameAddress = ((m_pGameServiceOption->cbDistributeRule&DISTRIBUTE_SAME_ADDRESS) != 0); ((CButton *)GetDlgItem(IDC_DISTRIBUTE_SAME_ADDRESS))->SetCheck((bDistributeSameAddress == TRUE) ? BST_CHECKED : BST_UNCHECKED); return TRUE; } //保存输入 bool CDlgServerOptionItem3::SaveInputInfo() { //属性配置 m_pGameServiceOption->wMinDistributeUser = GetDlgItemInt(IDC_MIN_DISTRIBUTE_USER); m_pGameServiceOption->wDistributeTimeSpace = GetDlgItemInt(IDC_DISTRIBUTE_TIME_SPACE); m_pGameServiceOption->wDistributeDrawCount = GetDlgItemInt(IDC_DISTRIBUTE_DRAW_COUNT); m_pGameServiceOption->wMinPartakeGameUser = GetDlgItemInt(IDC_DISTRIBUTE_START_MIN_USER); m_pGameServiceOption->wMaxPartakeGameUser = GetDlgItemInt(IDC_DISTRIBUTE_START_MAX_USER); //允许分组 if (((CButton *)GetDlgItem(IDC_DISTRIBUTE_ALLOW))->GetCheck() == BST_CHECKED) { m_pGameServiceOption->cbDistributeRule |= DISTRIBUTE_ALLOW; } else { m_pGameServiceOption->cbDistributeRule &= ~DISTRIBUTE_ALLOW; } //入座选项 if (((CButton *)GetDlgItem(IDC_DISTRIBUTE_IMMEDIATE))->GetCheck() == BST_CHECKED) { m_pGameServiceOption->cbDistributeRule |= DISTRIBUTE_IMMEDIATE; } else { m_pGameServiceOption->cbDistributeRule &= ~DISTRIBUTE_IMMEDIATE; } //同桌选项 if (((CButton *)GetDlgItem(IDC_DISTRIBUTE_LAST_TABLE))->GetCheck() == BST_CHECKED) { m_pGameServiceOption->cbDistributeRule |= DISTRIBUTE_LAST_TABLE; } else { m_pGameServiceOption->cbDistributeRule &= ~DISTRIBUTE_LAST_TABLE; } //地址选项 if (((CButton *)GetDlgItem(IDC_DISTRIBUTE_SAME_ADDRESS))->GetCheck() == BST_CHECKED) { m_pGameServiceOption->cbDistributeRule |= DISTRIBUTE_SAME_ADDRESS; } else { m_pGameServiceOption->cbDistributeRule &= ~DISTRIBUTE_SAME_ADDRESS; } return true; } //调整控件 VOID CDlgServerOptionItem3::RectifyControl(INT nWidth, INT nHeight) { return; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CDlgServerOptionItemCustom::CDlgServerOptionItemCustom() : CDlgServerOptionItem(IDD_SERVER_OPTION_4) { //设置变量 m_hCustomRule = NULL; m_pIGameServiceCustomRule = NULL; return; } //析构函数 CDlgServerOptionItemCustom::~CDlgServerOptionItemCustom() { } //初始化函数 BOOL CDlgServerOptionItemCustom::OnInitDialog() { __super::OnInitDialog(); //获取位置 CRect rcClient; GetClientRect(&rcClient); //设置变量 m_pIGameServiceCustomRule = m_pDlgServerWizard->m_pIGameServiceCustomRule; //创建窗口 WORD wCustonSize = sizeof(m_pGameServiceOption->cbCustomRule); m_hCustomRule = m_pIGameServiceCustomRule->CreateCustomRule(this, rcClient, m_pGameServiceOption->cbCustomRule, wCustonSize); return TRUE; } //保存输入 bool CDlgServerOptionItemCustom::SaveInputInfo() { //保存输入 if (m_hCustomRule != NULL) { //保存设置 WORD wCustonSize = sizeof(m_pGameServiceOption->cbCustomRule); bool bSuccess = m_pIGameServiceCustomRule->SaveCustomRule(m_pGameServiceOption->cbCustomRule, wCustonSize); return bSuccess; } return true; } //调整控件 VOID CDlgServerOptionItemCustom::RectifyControl(INT nWidth, INT nHeight) { //调整位置 if (m_hCustomRule != NULL) { ::SetWindowPos(m_hCustomRule, NULL, 0, 0, nWidth, nHeight, SWP_NOMOVE | SWP_NOZORDER); } return; } //消耗消息 VOID CDlgServerOptionItemCustom::OnNcDestroy() { //关闭窗口 if (m_hCustomRule != NULL) { ::DestroyWindow(m_hCustomRule); } //设置变量 m_hCustomRule = NULL; m_pIGameServiceCustomRule = NULL; __super::OnNcDestroy(); } //焦点消息 VOID CDlgServerOptionItemCustom::OnSetFocus(CWnd * pNewWnd) { __super::OnSetFocus(pNewWnd); //设置焦点 if (m_hCustomRule != NULL) { ::SetFocus(m_hCustomRule); } return; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CDlgServerWizardItem::CDlgServerWizardItem(UINT nIDTemplate) : CDialogEx(nIDTemplate) { //设置变量 m_pDlgServerWizard = NULL; m_pGameServiceAttrib = NULL; m_pGameServiceOption = NULL; return; } //析构函数 CDlgServerWizardItem::~CDlgServerWizardItem() { } //保存数据 bool CDlgServerWizardItem::SaveItemData() { //保存数据 if ((m_hWnd != NULL) && (SaveInputInfo() == false)) { return false; } return true; } //创建向导 bool CDlgServerWizardItem::ShowWizardItem(const CRect & rcRect, CWnd * pParentWnd) { //创建窗口 if (m_hWnd == NULL) { //设置资源 AfxSetResourceHandle(GetModuleHandle(MODULE_MANAGER_DLL_NAME)); //创建窗口 Create(m_lpszTemplateName, pParentWnd); SetWindowPos(NULL, rcRect.left, rcRect.top, rcRect.Width(), rcRect.Height(), SWP_NOZORDER | SWP_NOACTIVATE); //设置资源 AfxSetResourceHandle(GetModuleHandle(NULL)); } //显示窗口 ShowWindow(SW_SHOW); return true; } //确定函数 VOID CDlgServerWizardItem::OnOK() { //投递消息 GetParent()->PostMessage(WM_COMMAND, MAKELONG(IDOK, 0), 0); return; } //取消消息 VOID CDlgServerWizardItem::OnCancel() { //投递消息 GetParent()->PostMessage(WM_COMMAND, MAKELONG(IDCANCEL, 0), 0); return; } //位置消息 VOID CDlgServerWizardItem::OnSize(UINT nType, INT cx, INT cy) { __super::OnSize(nType, cx, cy); //调整控件 RectifyControl(cx, cy); return; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CDlgServerWizardItem1::CDlgServerWizardItem1() : CDlgServerWizardItem(IDD_SERVER_WIZARD_1) { } //析构函数 CDlgServerWizardItem1::~CDlgServerWizardItem1() { } //控件绑定 VOID CDlgServerWizardItem1::DoDataExchange(CDataExchange * pDX) { __super::DoDataExchange(pDX); DDX_Control(pDX, IDC_PROMPT, m_StaticPrompt); DDX_Control(pDX, IDC_MODULE_LIST, m_ModuleListControl); } //初始化函数 BOOL CDlgServerWizardItem1::OnInitDialog() { __super::OnInitDialog(); //加载列表 LoadDBModuleItem(); return TRUE; } //保存输入 bool CDlgServerWizardItem1::SaveInputInfo() { //变量定义 tagGameModuleInfo * pGameModuleInfo = NULL; POSITION Position = m_ModuleListControl.GetFirstSelectedItemPosition(); //获取选择 if (Position != NULL) { INT nListItem = m_ModuleListControl.GetNextSelectedItem(Position); pGameModuleInfo = (tagGameModuleInfo *)m_ModuleListControl.GetItemData(nListItem); } //选择判断 if (pGameModuleInfo == NULL) { AfxMessageBox(TEXT("请您先从游戏列表中选择游戏组件"), MB_ICONERROR); return false; } //游戏模块 m_GameServiceManager.CloseInstance(); m_GameServiceManager.SetModuleCreateInfo(pGameModuleInfo->szServerDLLName, GAME_SERVICE_CREATE_NAME); //创建判断 if (pGameModuleInfo->dwNativeVersion == 0L) { //构造提示 TCHAR szString[512] = TEXT(""); _sntprintf(szString, CountArray(szString), TEXT("[ %s ] 服务组件还没有安装,请先安装服务组件"), pGameModuleInfo->szGameName); //提示消息 AfxMessageBox(szString, MB_ICONERROR); return false; } //更新判断 if (pGameModuleInfo->dwNativeVersion != pGameModuleInfo->dwServerVersion) { //构造提示 TCHAR szString[512] = TEXT(""); _sntprintf(szString, CountArray(szString), TEXT("[ %s ] 服务组件更新了,是否还继续创建房间吗?"), pGameModuleInfo->szGameName); //提示消息 if (AfxMessageBox(szString, MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2) != IDYES) return false; } //加载模块 if (m_GameServiceManager.CreateInstance() == false) { //构造提示 TCHAR szString[512] = TEXT(""); _sntprintf(szString, CountArray(szString), TEXT("[ %s ] 服务组件加载失败,创建游戏房间失败"), pGameModuleInfo->szGameName); //提示消息 AfxMessageBox(szString, MB_ICONERROR); return false; } //配置模块 m_pDlgServerWizard->SetWizardParameter(m_GameServiceManager.GetInterface(), NULL); //默认设置 lstrcpyn(m_pGameServiceOption->szDataBaseName, pGameModuleInfo->szDataBaseName, CountArray(m_pGameServiceOption->szDataBaseName)); lstrcpyn(m_pGameServiceOption->szDataBaseAddr, pGameModuleInfo->szDataBaseAddr, CountArray(m_pGameServiceOption->szDataBaseAddr)); return true; } //调整控件 VOID CDlgServerWizardItem1::RectifyControl(INT nWidth, INT nHeight) { //调整提示 if (m_StaticPrompt.m_hWnd != NULL) { m_StaticPrompt.SetWindowPos(NULL, 5, 8, nWidth - 10, 12, SWP_NOZORDER | SWP_NOCOPYBITS); } //调整列表 if (m_ModuleListControl.m_hWnd != NULL) { m_ModuleListControl.SetWindowPos(NULL, 5, 28, nWidth - 10, nHeight - 28, SWP_NOZORDER | SWP_NOCOPYBITS); } return; } //加载列表 bool CDlgServerWizardItem1::LoadDBModuleItem() { //加载信息 if (m_ModuleInfoManager.LoadGameModuleInfo(m_ModuleInfoBuffer) == true) { //重置列表 m_ModuleListControl.DeleteAllItems(); //变量定义 POSITION Position = m_ModuleInfoBuffer.m_GameModuleInfoMap.GetStartPosition(); //枚举模块 while (Position != NULL) { //获取对象 WORD wModuleID = 0L; tagGameModuleInfo * pGameModuleInfo = NULL; m_ModuleInfoBuffer.m_GameModuleInfoMap.GetNextAssoc(Position, wModuleID, pGameModuleInfo); //插入列表 ASSERT(pGameModuleInfo != NULL); if (pGameModuleInfo != NULL) m_ModuleListControl.InsertModuleInfo(pGameModuleInfo); } } return false; } //双击列表 VOID CDlgServerWizardItem1::OnNMDblclkModuleList(NMHDR * pNMHDR, LRESULT * pResult) { //加载配置 if (((NMITEMACTIVATE *)pNMHDR)->iItem != LB_ERR) { //变量定义 INT nListItem = ((NMITEMACTIVATE *)pNMHDR)->iItem; tagGameModuleInfo * pGameModuleInfo = (tagGameModuleInfo *)m_ModuleListControl.GetItemData(nListItem); //投递消息 if (pGameModuleInfo->dwNativeVersion != 0L) { GetParent()->PostMessage(WM_COMMAND, MAKELONG(IDC_NEXT, 0), 0); } return; } return; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CDlgServerWizardItem2::CDlgServerWizardItem2() : CDlgServerWizardItem(IDD_SERVER_WIZARD_2) { //设置变量 m_wItemCount = 0; m_wActiveIndex = INVALID_WORD; ZeroMemory(m_pOptionItem, sizeof(m_pOptionItem)); return; } //析构函数 CDlgServerWizardItem2::~CDlgServerWizardItem2() { } //控件绑定 VOID CDlgServerWizardItem2::DoDataExchange(CDataExchange * pDX) { __super::DoDataExchange(pDX); DDX_Control(pDX, IDC_TAB_CTRL, m_TabCtrl); } //初始化函数 BOOL CDlgServerWizardItem2::OnInitDialog() { __super::OnInitDialog(); //设置变量 m_wItemCount = 0; m_wActiveIndex = INVALID_WORD; //基本配置 m_pOptionItem[m_wItemCount++] = &m_ServerOptionItem1; m_TabCtrl.InsertItem(ITEM_SERVER_OPTION_1, TEXT("基本配置")); //房间选项 m_pOptionItem[m_wItemCount++] = &m_ServerOptionItem2; m_TabCtrl.InsertItem(ITEM_SERVER_OPTION_2, TEXT("房间选项")); //附加权限 m_pOptionItem[m_wItemCount++] = &m_ServerOptionItem3; m_TabCtrl.InsertItem(ITEM_SERVER_OPTION_3, TEXT("分组选项")); //服务定制 if (m_pDlgServerWizard->m_pIGameServiceCustomRule != NULL) { m_pOptionItem[m_wItemCount++] = &m_ServerOptionItemCustom; m_TabCtrl.InsertItem(ITEM_SERVER_OPTION_CUSTOM, TEXT("服务定制")); } //激活子项 ActiveOptionItem(0); return TRUE; } //保存输入 bool CDlgServerWizardItem2::SaveInputInfo() { //保存输入 for (INT i = 0; i < m_wItemCount; i++) { if (m_pOptionItem[i]->SaveItemData() == false) { ActiveOptionItem(i); return false; } } return true; } //调整控件 VOID CDlgServerWizardItem2::RectifyControl(INT nWidth, INT nHeight) { //调整选择 if (m_TabCtrl.m_hWnd != NULL) { m_TabCtrl.SetWindowPos(NULL, 5, 5, nWidth - 10, nHeight - 5, SWP_NOZORDER | SWP_NOCOPYBITS); } //调整选择 if ((m_TabCtrl.m_hWnd != NULL) && (m_wActiveIndex != INVALID_WORD)) { //获取位置 CRect rcItemRect; m_TabCtrl.GetWindowRect(&rcItemRect); //计算位置 m_TabCtrl.ScreenToClient(&rcItemRect); m_TabCtrl.AdjustRect(FALSE, &rcItemRect); //移动位置 m_pOptionItem[m_wActiveIndex]->MoveWindow(&rcItemRect); } return; } //激活向导 bool CDlgServerWizardItem2::ActiveOptionItem(WORD wIndex) { //判断状态 if (m_wActiveIndex == wIndex) { m_pOptionItem[m_wActiveIndex]->SetFocus(); return true; } //保存旧项 CDlgServerOptionItem * pItemOption = NULL; if (m_wActiveIndex < m_wItemCount) pItemOption = m_pOptionItem[m_wActiveIndex]; //获取位置 CRect rcItemRect; m_TabCtrl.GetWindowRect(&rcItemRect); //计算位置 m_TabCtrl.ScreenToClient(&rcItemRect); m_TabCtrl.AdjustRect(FALSE, &rcItemRect); //设置新项 m_pOptionItem[wIndex]->m_pDlgServerWizard = m_pDlgServerWizard; m_pOptionItem[wIndex]->m_pGameServiceAttrib = m_pGameServiceAttrib; m_pOptionItem[wIndex]->m_pGameServiceOption = m_pGameServiceOption; //创建新项 m_wActiveIndex = wIndex; m_pOptionItem[m_wActiveIndex]->ShowOptionItem(rcItemRect, &m_TabCtrl); //激活新项 m_pOptionItem[m_wActiveIndex]->SetFocus(); if (pItemOption != NULL) pItemOption->ShowWindow(SW_HIDE); //设置选择 if (m_TabCtrl.GetCurSel() != wIndex) m_TabCtrl.SetCurSel(wIndex); return true; } //焦点消息 VOID CDlgServerWizardItem2::OnSetFocus(CWnd * pNewWnd) { __super::OnSetFocus(pNewWnd); //设置焦点 if ((m_wActiveIndex != INVALID_WORD) && (m_pOptionItem[m_wActiveIndex]->m_hWnd != NULL)) { m_pOptionItem[m_wActiveIndex]->SetFocus(); } return; } //选择改变 VOID CDlgServerWizardItem2::OnTcnSelchangeTabCtrl(NMHDR * pNMHDR, LRESULT * pResult) { //设置页面 switch (m_TabCtrl.GetCurSel()) { case ITEM_SERVER_OPTION_1:{ ActiveOptionItem(0); break; } case ITEM_SERVER_OPTION_2:{ ActiveOptionItem(1); break; } case ITEM_SERVER_OPTION_3:{ ActiveOptionItem(2); break; } case ITEM_SERVER_OPTION_CUSTOM:{ ActiveOptionItem(3); break; } } return; } ////////////////////////////////////////////////////////////////////////////////// //构造函数 CDlgServerWizard::CDlgServerWizard() : CDialogEx(IDD_SERVER_WIZARD_MAIN) { //设置变量 m_wActiveIndex = INVALID_WORD; m_pWizardItem[0] = &m_ServerWizardItem1; m_pWizardItem[1] = &m_ServerWizardItem2; //接口变量 m_pIGameServiceManager = NULL; m_pIGameServiceCustomRule = NULL; //配置信息 ZeroMemory(&m_ModuleInitParameter, sizeof(m_ModuleInitParameter)); return; } //析构函数 CDlgServerWizard::~CDlgServerWizard() { } //初始化函数 BOOL CDlgServerWizard::OnInitDialog() { __super::OnInitDialog(); //设置资源 AfxSetResourceHandle(GetModuleHandle(NULL)); //激活向导 ActiveWizardItem((m_pIGameServiceManager == NULL) ? 0 : 1); //组件属性 if (m_pIGameServiceManager != NULL) { SetDlgItemInt(IDC_GAME_ID, m_ModuleInitParameter.GameServiceAttrib.wKindID); ///---类型标识(如:303) SetDlgItemText(IDC_GAME_NAME, m_ModuleInitParameter.GameServiceAttrib.szGameName); ///---游戏名字(黄石晃晃) SetDlgItemInt(IDC_CHAIR_COUNT, m_ModuleInitParameter.GameServiceAttrib.wChairCount); ///---椅子数目 (4) SetDlgItemText(IDC_DATABASE_NAME, m_ModuleInitParameter.GameServiceAttrib.szDataBaseName); ///---默认数据库 SetDlgItemText(IDC_CLIENT_EXE_NAME, m_ModuleInitParameter.GameServiceAttrib.szClientEXEName); ///---客户端进程 SetDlgItemText(IDC_SERVICE_DLL_NAME, m_ModuleInitParameter.GameServiceAttrib.szServerDLLName); ///---服务组件名 } return FALSE; } //确定函数 VOID CDlgServerWizard::OnOK() { if ((m_wActiveIndex + 1) < CountArray(m_pWizardItem)) { OnBnClickedNext(); } else { OnBnClickedFinish(); } return; } //创建房间 bool CDlgServerWizard::CreateGameServer() { //设置资源 AfxSetResourceHandle(GetModuleHandle(MODULE_MANAGER_DLL_NAME)); //配置房间 if (DoModal() == IDOK) { return true; } return false; } //设置接口 VOID CDlgServerWizard::SetWizardParameter(IGameServiceManager * pIGameServiceManager, tagGameServiceOption * pGameServiceOption) { //销毁子项 if (pGameServiceOption == NULL) { for (WORD i = 1; i < CountArray(m_pWizardItem); i++) { if ((m_pWizardItem[i] != NULL) && (m_pWizardItem[i]->m_hWnd != NULL)) { m_pWizardItem[i]->DestroyWindow(); } } } //设置变量 m_pIGameServiceCustomRule = NULL; ZeroMemory(&m_ModuleInitParameter, sizeof(m_ModuleInitParameter)); //获取属性 ASSERT(pIGameServiceManager != NULL); pIGameServiceManager->GetServiceAttrib(m_ModuleInitParameter.GameServiceAttrib); //设置接口 m_pIGameServiceManager = pIGameServiceManager; m_pIGameServiceCustomRule = QUERY_OBJECT_PTR_INTERFACE(m_pIGameServiceManager, IGameServiceCustomRule); //组件属性 if (m_hWnd != NULL) { SetDlgItemInt(IDC_GAME_ID, m_ModuleInitParameter.GameServiceAttrib.wKindID); SetDlgItemText(IDC_GAME_NAME, m_ModuleInitParameter.GameServiceAttrib.szGameName); SetDlgItemInt(IDC_CHAIR_COUNT, m_ModuleInitParameter.GameServiceAttrib.wChairCount); SetDlgItemText(IDC_DATABASE_NAME, m_ModuleInitParameter.GameServiceAttrib.szDataBaseName); SetDlgItemText(IDC_CLIENT_EXE_NAME, m_ModuleInitParameter.GameServiceAttrib.szClientEXEName); SetDlgItemText(IDC_SERVICE_DLL_NAME, m_ModuleInitParameter.GameServiceAttrib.szServerDLLName); } //设置规则 if (pGameServiceOption == NULL) { //自定规则 if (m_pIGameServiceCustomRule != NULL) { WORD wCustomSize = sizeof(m_ModuleInitParameter.GameServiceOption.cbCustomRule); m_pIGameServiceCustomRule->DefaultCustomRule(m_ModuleInitParameter.GameServiceOption.cbCustomRule, wCustomSize); } //调整参数 ASSERT(m_pIGameServiceManager != NULL); m_pIGameServiceManager->RectifyParameter(m_ModuleInitParameter.GameServiceOption); } else { //拷贝规则 CopyMemory(&m_ModuleInitParameter.GameServiceOption, pGameServiceOption, sizeof(tagGameServiceOption)); } return; } //激活向导 bool CDlgServerWizard::ActiveWizardItem(WORD wIndex) { //判断状态 if (m_wActiveIndex == wIndex) { m_pWizardItem[m_wActiveIndex]->SetFocus(); return true; } //保存旧项 CDlgServerWizardItem * pItemWizard = NULL; if (m_wActiveIndexm_wActiveIndex) && (m_pWizardItem[m_wActiveIndex]->SaveItemData() == false)) return false; } //获取位置 CRect rcItemRect; GetDlgItem(IDC_ITEM_FRAME)->GetWindowRect(rcItemRect); ScreenToClient(&rcItemRect); //设置新项 m_pWizardItem[wIndex]->m_pDlgServerWizard = this; m_pWizardItem[wIndex]->m_pGameServiceAttrib = &m_ModuleInitParameter.GameServiceAttrib; m_pWizardItem[wIndex]->m_pGameServiceOption = &m_ModuleInitParameter.GameServiceOption; //创建新项 m_wActiveIndex = wIndex; m_pWizardItem[m_wActiveIndex]->ShowWizardItem(rcItemRect, this); //激活新项 m_pWizardItem[m_wActiveIndex]->SetFocus(); if (pItemWizard != NULL) pItemWizard->ShowWindow(SW_HIDE); //界面变量 CButton * pButtonLast = (CButton *)GetDlgItem(IDC_LAST); CButton * pButtonNext = (CButton *)GetDlgItem(IDC_NEXT); CButton * pButtonFinish = (CButton *)GetDlgItem(IDC_FINISH); //进度界面 pButtonNext->EnableWindow(((m_wActiveIndex + 1)EnableWindow(((m_wActiveIndex + 1) == CountArray(m_pWizardItem)) ? TRUE : FALSE); pButtonLast->EnableWindow(((m_wActiveIndex>1) || ((m_ModuleInitParameter.GameServiceOption.wServerID == 0) && (m_wActiveIndex > 0))) ? TRUE : FALSE); //构造标题 TCHAR szTitle[128] = TEXT(""); _sntprintf(szTitle, CountArray(szTitle), TEXT("房间配置向导 --- [ 步骤 %d ]"), m_wActiveIndex + 1); //设置标题 SetWindowText(szTitle); return true; } //上一步 VOID CDlgServerWizard::OnBnClickedLast() { //效验参数 ASSERT(m_wActiveIndex > 0); ASSERT(m_wActiveIndex < CountArray(m_pWizardItem)); //切换页面 ActiveWizardItem(m_wActiveIndex - 1); return; } //下一步 VOID CDlgServerWizard::OnBnClickedNext() { //效验参数 ASSERT((m_wActiveIndex + 1) < CountArray(m_pWizardItem)); //激活页面 ActiveWizardItem(m_wActiveIndex + 1); return; } //完成按钮 VOID CDlgServerWizard::OnBnClickedFinish() { //保存设置 ASSERT(m_wActiveIndex >= 1); if (m_pWizardItem[m_wActiveIndex]->SaveItemData() == false) return; //房间信息 tagGameServerCreate GameServerCreate; ZeroMemory(&GameServerCreate, sizeof(GameServerCreate)); //参数调整 ASSERT(m_pIGameServiceManager != NULL); m_pIGameServiceManager->RectifyParameter(m_ModuleInitParameter.GameServiceOption); //索引变量 GameServerCreate.wGameID = m_ModuleInitParameter.GameServiceAttrib.wKindID; GameServerCreate.wServerID = m_ModuleInitParameter.GameServiceOption.wServerID; //挂接属性 GameServerCreate.wKindID = m_ModuleInitParameter.GameServiceOption.wKindID; GameServerCreate.wNodeID = m_ModuleInitParameter.GameServiceOption.wNodeID; GameServerCreate.wSortID = m_ModuleInitParameter.GameServiceOption.wSortID; //税收配置 GameServerCreate.lCellScore = m_ModuleInitParameter.GameServiceOption.lCellScore; GameServerCreate.wRevenueRatio = m_ModuleInitParameter.GameServiceOption.wRevenueRatio; GameServerCreate.lServiceScore = m_ModuleInitParameter.GameServiceOption.lServiceScore; //限制配置 GameServerCreate.lRestrictScore = m_ModuleInitParameter.GameServiceOption.lRestrictScore; GameServerCreate.lMinTableScore = m_ModuleInitParameter.GameServiceOption.lMinTableScore; GameServerCreate.lMinEnterScore = m_ModuleInitParameter.GameServiceOption.lMinEnterScore; GameServerCreate.lMaxEnterScore = m_ModuleInitParameter.GameServiceOption.lMaxEnterScore; //会员限制 GameServerCreate.cbMaxEnterMember = m_ModuleInitParameter.GameServiceOption.cbMaxEnterMember; GameServerCreate.cbMaxEnterMember = m_ModuleInitParameter.GameServiceOption.cbMaxEnterMember; //房间配置 GameServerCreate.dwServerRule = m_ModuleInitParameter.GameServiceOption.dwServerRule; GameServerCreate.dwAttachUserRight = m_ModuleInitParameter.GameServiceOption.dwAttachUserRight; //房间属性 GameServerCreate.wMaxPlayer = m_ModuleInitParameter.GameServiceOption.wMaxPlayer; GameServerCreate.wTableCount = m_ModuleInitParameter.GameServiceOption.wTableCount; GameServerCreate.wServerType = m_ModuleInitParameter.GameServiceOption.wServerType; GameServerCreate.wServerKind = m_ModuleInitParameter.GameServiceOption.wServerKind; GameServerCreate.wServerPort = m_ModuleInitParameter.GameServiceOption.wServerPort; lstrcpyn(GameServerCreate.szServerName, m_ModuleInitParameter.GameServiceOption.szServerName, CountArray(GameServerCreate.szServerName)); lstrcpyn(GameServerCreate.szServerPasswd, m_ModuleInitParameter.GameServiceOption.szServerPasswd, CountArray(GameServerCreate.szServerPasswd)); //分组属性 GameServerCreate.cbDistributeRule = m_ModuleInitParameter.GameServiceOption.cbDistributeRule; GameServerCreate.wMinDistributeUser = m_ModuleInitParameter.GameServiceOption.wMinDistributeUser; GameServerCreate.wDistributeTimeSpace = m_ModuleInitParameter.GameServiceOption.wDistributeTimeSpace; GameServerCreate.wDistributeDrawCount = m_ModuleInitParameter.GameServiceOption.wDistributeDrawCount; GameServerCreate.wMinPartakeGameUser = m_ModuleInitParameter.GameServiceOption.wMinPartakeGameUser; GameServerCreate.wMaxPartakeGameUser = m_ModuleInitParameter.GameServiceOption.wMaxPartakeGameUser; //连接信息 lstrcpyn(GameServerCreate.szDataBaseName, m_ModuleInitParameter.GameServiceOption.szDataBaseName, CountArray(GameServerCreate.szDataBaseName)); lstrcpyn(GameServerCreate.szDataBaseAddr, m_ModuleInitParameter.GameServiceOption.szDataBaseAddr, CountArray(GameServerCreate.szDataBaseAddr)); //扩展配置 CWHService::GetMachineID(GameServerCreate.szServiceMachine); CopyMemory(GameServerCreate.cbCustomRule, m_ModuleInitParameter.GameServiceOption.cbCustomRule, sizeof(GameServerCreate.cbCustomRule)); //变量定义 tagGameServerInfo GameServerResult; CServerInfoManager ServerInfoManager; //插入房间 if (GameServerCreate.wServerID == 0) { ///---保存入库 if (ServerInfoManager.InsertGameServer(&GameServerCreate, GameServerResult) == false) { return; } //提示消息 CTraceService::TraceString(TEXT("游戏房间创建成功"), TraceLevel_Normal); } //修改房间 if (GameServerCreate.wServerID != 0) { //修改房间 if (ServerInfoManager.ModifyGameServer(&GameServerCreate, GameServerResult) == false) return; //提示消息 CTraceService::TraceString(TEXT("游戏房间配置成功"), TraceLevel_Normal); } //索引变量 m_ModuleInitParameter.GameServiceOption.wServerID = GameServerResult.wServerID; //挂接属性 m_ModuleInitParameter.GameServiceOption.wKindID = GameServerResult.wKindID; m_ModuleInitParameter.GameServiceOption.wNodeID = GameServerResult.wNodeID; m_ModuleInitParameter.GameServiceOption.wSortID = GameServerResult.wSortID; //税收配置 m_ModuleInitParameter.GameServiceOption.lCellScore = GameServerResult.lCellScore; m_ModuleInitParameter.GameServiceOption.wRevenueRatio = m_ModuleInitParameter.GameServiceOption.wRevenueRatio; m_ModuleInitParameter.GameServiceOption.lServiceScore = m_ModuleInitParameter.GameServiceOption.lServiceScore; //限制配置 m_ModuleInitParameter.GameServiceOption.lRestrictScore = GameServerResult.lRestrictScore; m_ModuleInitParameter.GameServiceOption.lMinTableScore = GameServerResult.lMinTableScore; m_ModuleInitParameter.GameServiceOption.lMinEnterScore = GameServerResult.lMinEnterScore; m_ModuleInitParameter.GameServiceOption.lMaxEnterScore = GameServerResult.lMaxEnterScore; //会员限制 m_ModuleInitParameter.GameServiceOption.cbMaxEnterMember = GameServerResult.cbMaxEnterMember; m_ModuleInitParameter.GameServiceOption.cbMaxEnterMember = GameServerResult.cbMaxEnterMember; //房间配置 m_ModuleInitParameter.GameServiceOption.dwServerRule = GameServerResult.dwServerRule; m_ModuleInitParameter.GameServiceOption.dwAttachUserRight = GameServerResult.dwAttachUserRight; //房间属性 m_ModuleInitParameter.GameServiceOption.wMaxPlayer = GameServerResult.wMaxPlayer; m_ModuleInitParameter.GameServiceOption.wTableCount = GameServerResult.wTableCount; m_ModuleInitParameter.GameServiceOption.wServerType = GameServerResult.wServerType; m_ModuleInitParameter.GameServiceOption.wServerPort = GameServerResult.wServerPort; lstrcpyn(m_ModuleInitParameter.GameServiceOption.szServerName, GameServerResult.szServerName, LEN_SERVER); //分组属性 m_ModuleInitParameter.GameServiceOption.cbDistributeRule = GameServerResult.cbDistributeRule; m_ModuleInitParameter.GameServiceOption.wMinDistributeUser = GameServerResult.wMinDistributeUser; m_ModuleInitParameter.GameServiceOption.wDistributeTimeSpace = GameServerResult.wDistributeTimeSpace; m_ModuleInitParameter.GameServiceOption.wDistributeDrawCount = GameServerResult.wDistributeDrawCount; m_ModuleInitParameter.GameServiceOption.wMinPartakeGameUser = GameServerResult.wMinPartakeGameUser; m_ModuleInitParameter.GameServiceOption.wMaxPartakeGameUser = GameServerResult.wMaxPartakeGameUser; //扩展配置 UINT uCustomRuleSize = sizeof(m_ModuleInitParameter.GameServiceOption.cbCustomRule); CopyMemory(m_ModuleInitParameter.GameServiceOption.cbCustomRule, GameServerResult.cbCustomRule, uCustomRuleSize); ///---加载该游戏的场馆配置 std::vector vecVenueInfo; CServerInfoManager svrInfoManager; svrInfoManager.LoadVenueInfos(m_ModuleInitParameter.GameServiceAttrib.wKindID, vecVenueInfo); m_ModuleInitParameter.vecVenueInfo = vecVenueInfo; ///+++如果是金币场,使用场馆的最新配置 if (m_ModuleInitParameter.GameServiceOption.wNodeID > 0) { for (std::vector::iterator it = vecVenueInfo.begin(); it != vecVenueInfo.end(); it++) { if (it->wVenueID == m_ModuleInitParameter.GameServiceOption.wNodeID) { m_ModuleInitParameter.GameServiceOption.lCellScore = it->sBaseScore; m_ModuleInitParameter.GameServiceOption.lMinEnterScore = it->sMinScore; m_ModuleInitParameter.GameServiceOption.lMaxEnterScore = it->sMaxScore; m_ModuleInitParameter.GameServiceOption.lRestrictScore = it->lRestrictScore; m_ModuleInitParameter.GameServiceOption.lServiceScore = it->sServiceScore; m_ModuleInitParameter.GameServiceOption.wRevenueRatio = it->wRevenueRatio; lstrcpyn(m_ModuleInitParameter.GameServiceOption.szExtConfig, it->szExtConfig, CountArray(it->szExtConfig)); break; } } } //关闭窗口 EndDialog(IDOK); return; } ////////////////////////////////////////////////////////////////////////////////// void CDlgServerOptionItem1::OnBnClickedRevenueRadio() { // GetDlgItem(IDC_STATIC_REVENUE_SERVICE)->SetWindowText(TEXT("税收比例:")); ((CEdit *)GetDlgItem(IDC_SERVICE_REVENUE))->SetWindowText(TEXT("")); ((CEdit *)GetDlgItem(IDC_SERVICE_REVENUE))->LimitText(3); } void CDlgServerOptionItem1::OnBnClickedServiceRadio() { // GetDlgItem(IDC_STATIC_REVENUE_SERVICE)->SetWindowText(TEXT("服务费数:")); ((CEdit *)GetDlgItem(IDC_SERVICE_REVENUE))->SetWindowText(TEXT("")); ((CEdit *)GetDlgItem(IDC_SERVICE_REVENUE))->LimitText(9); }