void CarManager::OnRoleGlobelChange(DWORD dwUserID, int ChangeSum)//当发生用户充值的时候 { if (m_TableBankerUserID != 0 && m_TableBankerUserID == dwUserID) { Role* pBankerRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pBankerRole) return; MG_Cmd_CarBankerUserGlobelChange msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarBankerUserGlobelChange), sizeof(MG_Cmd_CarBankerUserGlobelChange)); msg.dwBankerGlobelSum = pBankerRole->GetGlobelSum(); msg.dwBankerUserID = dwUserID; HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.begin(); for (; Iter != m_TableUserMap.end(); ++Iter) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(Iter->first); if (!pRole) continue; msg.dwUserID = Iter->first; pRole->SendDataToGameServer(&msg); } } else { Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pRole) return; //如果为VIP席位的话 HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter == m_TableUserMap.end()) return; if (!Iter->second.IsInVipSeat) return; //如果玩家在VIP位置上的时候 MG_Cmd_CarVipGlobelChange msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarVipGlobelChange), sizeof(MG_Cmd_CarVipGlobelChange)); msg.VipUserID = dwUserID; msg.VipGlobelSum = pRole->GetGlobelSum(); HashMap<DWORD, tagCarRoleInfo>::iterator IterRole = m_TableUserMap.begin(); for (; IterRole != m_TableUserMap.end(); ++IterRole) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(IterRole->first); if (!pRole) continue; msg.dwUserID = IterRole->first; pRole->SendDataToGameServer(&msg); } } }
void CarManager::OnTableJoinBegin() { //当桌子进入下注阶段的时候 //1.判断庄家是否需要进行变化 SetNextBankerUserInfo(); //2.清空桌子上的数据 OnClearTableInfo(); //3.通知玩家 进入新的阶段了 SetTableStates(CTS_Begin);//桌子进入下注阶段 //4.生成轮盘数据 CreateNewCar(); //5. MG_Cmd_CarTableJoinBegin msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarTableJoinBegin), sizeof(MG_Cmd_CarTableJoinBegin)); HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.begin(); for (; Iter != m_TableUserMap.end(); ++Iter) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(Iter->first); if (!pRole) continue; msg.dwUserID = Iter->first; pRole->SendDataToGameServer(&msg); } m_robotmanager.StartGame(); }
void CarManager::OnRoleGetWriteBankerFirstSeat(DWORD dwUserID) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pRole) { ASSERT(false); return; } HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter == m_TableUserMap.end()) { ASSERT(false); return; } MG_Cmd_CarRoleGetBankerFirstSeat msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarRoleGetBankerFirstSeat), sizeof(MG_Cmd_CarRoleGetBankerFirstSeat)); msg.dwUserID = dwUserID; msg.Result = false; //1.不在列表里面 if (!Iter->second.IsInWriteBanakerVec) { pRole->SendDataToGameServer(&msg); return; } vector<DWORD>::iterator IterFind = find(m_TableWriteBankerVec.begin(), m_TableWriteBankerVec.end(), dwUserID); if (IterFind == m_TableWriteBankerVec.end()) { pRole->SendDataToGameServer(&msg); return; } //2.是否为头名 if (*(m_TableWriteBankerVec.begin()) == dwUserID) { pRole->SendDataToGameServer(&msg); return; } //3.金币是否足够 if (pRole->GetGlobelSum() < g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.GetNextBankerNeedGlobel) { pRole->SendDataToGameServer(&msg); return; } //可以抢庄 msg.Result = true; //1.扣除金币 pRole->OnChangeRoleGlobelSum(pRole->GetGlobelSum() - g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.GetNextBankerNeedGlobel); //2.改变位置 m_TableWriteBankerVec.erase(IterFind); /*vector<DWORD> tempVec; tempVec.push_back(dwUserID); copy(tempVec.begin() + 1, m_TableWriteBankerVec.begin(), m_TableWriteBankerVec.end()); m_TableWriteBankerVec = tempVec;*/ m_TableWriteBankerVec.insert(m_TableWriteBankerVec.begin(), dwUserID); //3. OnWriteBankerChange();//列表变化了 pRole->SendDataToGameServer(&msg); }
void CarManager::OnRoleJoinWriteBankerList(DWORD dwUserID) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pRole) { ASSERT(false); return; } HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter == m_TableUserMap.end()) { ASSERT(false); return; } //玩家试图进行上庄 MG_Cmd_CarRoleJoinBankerList msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarRoleJoinBankerList), sizeof(MG_Cmd_CarRoleJoinBankerList)); msg.dwUserID = dwUserID; msg.Result = false; msg.SeatIndex = 0xffffffff; //1.已经在列表里面了 if (Iter->second.IsInWriteBanakerVec) { pRole->SendDataToGameServer(&msg); return; } //2.判断玩家金币是否足够 if (pRole->GetGlobelSum() < g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.JoinBankerGlobelSum) { pRole->SendDataToGameServer(&msg); return; } //3.判断是否为庄家 if (dwUserID == m_TableBankerUserID && !m_IsNeedClearBankerInfo) { pRole->SendDataToGameServer(&msg); return; } //可以上庄了 // msg.Result = true; msg.SeatIndex = m_TableWriteBankerVec.size(); Iter->second.IsInWriteBanakerVec = true; //扣除金币 //pRole->OnChangeRoleGlobelSum(pRole->GetGlobelSum() - g_FishServer.GetFishConfig().GetFishMiNiGameConfig().niuniuConfig.JoinBankerGlobelSum); //加入到列表里面去 m_TableWriteBankerVec.push_back(dwUserID);//加入到列表里面去 // if (msg.SeatIndex < MAX_CARSHOWBRAND_Sum) { OnWriteBankerChange(); } else { pRole->SendDataToGameServer(&msg); } }
void RoleFtpManager::OnUpLoadFaceData(WORD StarIndex, WORD Length, BYTE* pData) { if (!m_pRole) { ASSERT(false); return; } //开始处理数据 if (StarIndex + Length > m_DataLength || !pData) return; memcpy_s((VOID*)(m_FaceData + StarIndex), Length, pData, Length); bool bret = (StarIndex + Length == m_DataLength); if (bret) { //玩家自定义头像上传完毕 我们将头像保存到FTP去 //1.发送命令到FTP去 并且等待FTP的返回结果处理 //SaveImage static int MASK1 = GetTickCount(); static int MASK2 = MASK1 + rand(); UINT t = GetTickCount(); UINT crc = AECrc32(&t, sizeof(t), 0); t = m_DataLength; crc = AECrc32(&t, sizeof(t), crc); t = ++MASK1; crc = AECrc32(&t, sizeof(t), crc); t = ++MASK2; crc = AECrc32(&t, sizeof(t), crc); char xx[50]; sprintf_s(xx, sizeof(xx), "%u_%u.jpg", (UINT)m_pRole->GetUserID(), crc);//创建路径 //将数据发送到FTP去 DWORD cmdSize = sizeof(GF_Cmd_SaveImageData)+(m_DataLength - 1); CheckMsgSize(cmdSize); GF_Cmd_SaveImageData *pCmd = (GF_Cmd_SaveImageData*)malloc(cmdSize); pCmd->SetCmdSize(ConvertDWORDToWORD(cmdSize)); pCmd->SetCmdType(GetMsgType(Main_Role, GF_SaveImageData));//命令类型 pCmd->ID = m_pRole->GetUserID(); strncpy_s(pCmd->ImgName, sizeof(pCmd->ImgName), xx, CountArray(xx)); pCmd->ImgSize = m_DataLength; pCmd->Size = ConvertDWORDToWORD(cmdSize); pCmd->ImgCrc = crc; memcpy_s(pCmd->ImgData, m_DataLength, m_FaceData, m_DataLength); g_FishServer.SendNetCmdToFTP(pCmd); free(pCmd); if (m_FaceData) { free(m_FaceData); m_FaceData = NULL; } m_DataLength = 0; } NetCmdUploadImgChunkResponse pCmd; SetMsgInfo(pCmd,CMD_UPLOADING_CHUNK_RESPONSE, sizeof(NetCmdUploadImgChunkResponse)); pCmd.UploadResult = byte(byte(bret << 7) | 1); m_pRole->SendDataToClient(&pCmd); }
void ExChangeManager::OnUseExChangeCodeDBResult(DBO_Cmd_QueryExChange* pMsg) { if (!pMsg) { ASSERT(false); return; } CRoleEx* pRole = g_FishServer.GetRoleManager()->QueryUser(pMsg->dwUserID); if (!pRole) { ASSERT(false); return; } LC_Cmd_RoleUseExChangeCode msgRole; SetMsgInfo(msgRole, GetMsgType(Main_Exchange, LC_RoleUseExChangeCode), sizeof(LC_Cmd_RoleUseExChangeCode)); msgRole.Result = false; msgRole.ID = 0; if (pMsg->ID != 0) { BYTE ID = pMsg->ID; HashMap<BYTE, tagExChange>::iterator Iter = g_FishServer.GetFishConfig().GetExChangeMap().m_ExChangeMap.find(ID); if (Iter != g_FishServer.GetFishConfig().GetExChangeMap().m_ExChangeMap.end()) { if ((pRole->GetChannelID() == Iter->second.ChannelID || Iter->second.ChannelID == 0) && (Iter->second.TypeID == 0 || ((pRole->GetRoleInfo().ExChangeStates & Iter->second.TypeID) == 0))) { DWORD States = (pRole->GetRoleInfo().ExChangeStates | Iter->second.TypeID); pRole->ChangeRoleExChangeStates(States); //·¢Ëͽ±Àø pRole->OnAddRoleRewardByRewardID(Iter->second.RewardID, TEXT("¶Ò»»Âë»ñÈ¡½±Àø")); //ɾ³ý¶Ò»»Âë DBR_Cmd_DelExChange msg; SetMsgInfo(msg, DBR_DelExChange, sizeof(DBR_Cmd_DelExChange)); msg.dwUserID = pRole->GetUserID(); TCHARCopy(msg.ExChangeCode, CountArray(msg.ExChangeCode), pMsg->ExChangeCode, _tcslen(pMsg->ExChangeCode)); g_FishServer.SendNetCmdToSaveDB(&msg); //¼Ç¼µ½LogÊý¾Ý¿âÈ¥ g_DBLogManager.LogExChangeInfoToDB(pMsg->dwUserID, pMsg->ID, pMsg->ExChangeCode, SendLogDB); msgRole.Result = true; msgRole.ID = ID; } else { msgRole.Result = false; msgRole.ID = ID; } } } pRole->SendDataToClient(&msgRole); }
void RoleProtect::Request() { if (CanFetch()) { m_pRole->AddRoleProtectSum(); m_pRole->ChangeRoleGlobe((int)(g_FishServer.GetFishConfig().GetRoleProtectConfig().AddGlobel*m_pRole->GetRoleVip().AddAlmsRate()), true); LC_Cmd_RoleProtect msg; SetMsgInfo(msg, GetMsgType(Main_Role, LC_RoleProtect), sizeof(LC_Cmd_RoleProtect)); m_pRole->SendDataToClient(&msg); } }
void CarManager::OnWriteBankerChange() { MG_Cmd_CarBankerListChange msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarBankerListChange), sizeof(MG_Cmd_CarBankerListChange)); //SendDataToAllTableRole(&msg); HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.begin(); for (; Iter != m_TableUserMap.end(); ++Iter) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(Iter->first); if (!pRole) continue; msg.dwUserID = Iter->first; pRole->SendDataToGameServer(&msg); } }
bool RoleRank::GetRankReward(BYTE RankID) { if (!m_pRole || !m_IsLoadDB) { ASSERT(false); return false; } //获取排行榜的奖励 HashMap<BYTE, tagRankWeekRankClient>::iterator Iter = m_RankInfo.find(RankID); if (Iter == m_RankInfo.end()) { ASSERT(false); return false; } if (Iter->second.IsReward || Iter->second.RankID != RankID) { ASSERT(false); return false; } HashMap<BYTE, tagRankConfig>::iterator IterRank = g_FishServer.GetFishConfig().GetRankConfig().m_RankMap.find(RankID); if (IterRank == g_FishServer.GetFishConfig().GetRankConfig().m_RankMap.end()) { ASSERT(false); return false; } HashMap<BYTE, tagRankReward>::iterator IterReward = IterRank->second.RewardMap.find(Iter->second.RankIndex); if (IterReward == IterRank->second.RewardMap.end()) { ASSERT(false); return false; } Iter->second.IsReward = true; m_pRole->GetRoleMessageStates().OnChangeRoleMessageStates(RMT_WeekRank); //发送命令到数据库去 立即保存 DBR_Cmd_ChangeWeekInfo msgDB; SetMsgInfo(msgDB, DBR_ChangeWeekInfo, sizeof(DBR_Cmd_ChangeWeekInfo)); msgDB.dwUserID = m_pRole->GetUserID(); msgDB.RankInfo = Iter->second; g_FishServer.SendNetCmdToSaveDB(&msgDB); m_pRole->OnAddRoleRewardByRewardID(IterReward->second.RewardID,TEXT("领取排行榜奖励")); LC_Cmd_GetRankReward msg; SetMsgInfo(msg, GetMsgType(Main_Rank, LC_GetRankReward), sizeof(LC_Cmd_GetRankReward)); msg.RankID = Iter->first; m_pRole->SendDataToClient(&msg); return true; }
void CarManager::OnUpdateTableInfo() { //更新桌子上的数据 MG_Cmd_CarTableUpdate msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarTableUpdate), sizeof(MG_Cmd_CarTableUpdate)); for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) msg.TableBetAreaGlobel[i] = m_TableBetAreaGlobel[i]; HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.begin(); for (; Iter != m_TableUserMap.end(); ++Iter) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(Iter->first); if (!pRole) continue; msg.dwUserID = Iter->first; pRole->SendDataToGameServer(&msg); } }
void CarManager::OnRoleGetWriteBankerList(DWORD dwUserID) { //玩家进入庄家排队列表 Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pRole) { ASSERT(false); return; } //发生命令到客户端去 MG_Cmd_CarGetBankerList msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarGetBankerList), sizeof(MG_Cmd_CarGetBankerList)); msg.dwUserID = dwUserID; msg.dwMySeatIndex = 0xffffffff; for (BYTE i = 0; i < MAX_CARSHOWBRAND_Sum; ++i) { msg.TableWriteBankerList[i].dwUserID = 0; msg.TableWriteBankerList[i].GlobelSum = 0; msg.TableWriteBankerList[i].NickName[0] = 0; msg.TableWriteBankerList[i].dwFaceID = 0; } if (!m_TableWriteBankerVec.empty()) { vector<DWORD>::iterator Iter = m_TableWriteBankerVec.begin(); for (BYTE i = 0; Iter != m_TableWriteBankerVec.end() && i < MAX_CARSHOWBRAND_Sum;) { Role* pDestRole = g_FishServer.GetRoleManager().QueryRole(*Iter); if (!pDestRole) { //++i; ++Iter; continue; } if (*Iter == dwUserID) msg.dwMySeatIndex = i; msg.TableWriteBankerList[i].dwUserID = *Iter; msg.TableWriteBankerList[i].GlobelSum = pDestRole->GetGlobelSum(); msg.TableWriteBankerList[i].dwFaceID = pDestRole->GetFaceID(); TCHARCopy(msg.TableWriteBankerList[i].NickName, CountArray(msg.TableWriteBankerList[i].NickName), pDestRole->GetNickName(), _tcslen(pDestRole->GetNickName())); ++i; ++Iter; } } pRole->SendDataToGameServer(&msg); }
void CarManager::OnRoleLeaveWriteBankerList(DWORD dwUserID) { //玩家离开上庄排队列表 Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter == m_TableUserMap.end()) { ASSERT(false); return; } MG_Cmd_CarRoleLeaveBankerList msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarRoleLeaveBankerList), sizeof(MG_Cmd_CarRoleLeaveBankerList)); msg.dwUserID = dwUserID; msg.Result = false; //1.不在队列里面 if (!Iter->second.IsInWriteBanakerVec) { if (pRole) pRole->SendDataToGameServer(&msg); return; } vector<DWORD>::iterator IterFind = find(m_TableWriteBankerVec.begin(), m_TableWriteBankerVec.end(), dwUserID); if (IterFind == m_TableWriteBankerVec.end()) { if (pRole) pRole->SendDataToGameServer(&msg); return; } //2.让玩家离开队列 并且退钱 //因为玩家离开队列 我们触发更新命令 size_t Index = IterFind - m_TableWriteBankerVec.begin(); if (Index < MAX_CARSHOWBRAND_Sum) { OnWriteBankerChange(); } else { msg.Result = true; if (pRole) pRole->SendDataToGameServer(&msg); } m_TableWriteBankerVec.erase(IterFind);//移除数据 Iter->second.IsInWriteBanakerVec = false; }
void CarManager::OnRoleLeaveVipSeat(DWORD dwUserID) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter == m_TableUserMap.end()) { ASSERT(false); return; } if (Iter->second.IsBankerUser) { ASSERT(false); return; } if (!Iter->second.IsInVipSeat) { ASSERT(false); return; } if (m_VipSeatVec[Iter->second.VipSeat].dwUserID != dwUserID) { ASSERT(false); return; } m_VipSeatVec[Iter->second.VipSeat].dwUserID = 0; m_VipSeatVec[Iter->second.VipSeat].NonBetGlobelSum = 0; Iter->second.IsInVipSeat = false; Iter->second.VipSeat = 0; MG_Cmd_CarRoleLeaveVipSeat msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarRoleLeaveVipSeat), sizeof(MG_Cmd_CarRoleLeaveVipSeat)); msg.dwDestUserID = dwUserID; msg.VipSeatIndex = Iter->second.VipSeat; HashMap<DWORD, tagCarRoleInfo>::iterator IterSend = m_TableUserMap.begin(); for (; IterSend != m_TableUserMap.end(); ++IterSend) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(IterSend->first); if (!pRole) continue; msg.dwUserID = IterSend->first; pRole->SendDataToGameServer(&msg); } }
void AnnouncementManager::OnAddNewAnnouncementOnce(AnnouncementOnce& pOnce) { //接收到GameServer发送来的新的公告 m_AnnouncementList.push_front(pOnce); while (m_AnnouncementList.size() > g_FishServer.GetFishConfig().GetSystemConfig().AnnouncementSum) { m_AnnouncementList.pop_back();//移除最后面的一个公告 } CG_Cmd_SendNewAnnouncementOnce msg; SetMsgInfo(msg, GetMsgType(Main_Announcement, CG_SendNewAnnouncementOnce), sizeof(CG_Cmd_SendNewAnnouncementOnce)); msg.pOnce = pOnce; g_FishServer.GetCenterManager().SendNetCmdToAllGameServer(&msg);//发送给全部的GameServer去 DBR_Cmd_AddAnnouncement msgDB; SetMsgInfo(msgDB, DBR_AddAnnouncement, sizeof(DBR_Cmd_AddAnnouncement)); msgDB.AnnouncementInfo = pOnce; g_FishServer.SendNetCmdToDB(&msgDB); }
void CarManager::OnBankerUserChange() { MG_Cmd_CarBankerUserChange msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarBankerUserChange), sizeof(MG_Cmd_CarBankerUserChange)); if (m_TableBankerUserID == 0) { msg.BankerUserInfo.dwUserID = 0; msg.BankerUserInfo.GlobelSum = 0; msg.BankerUserInfo.NickName[0] = 0; msg.BankerUserInfo.dwFaceID = 0; msg.GameSum = 0; } else { Role* pBankerRole = g_FishServer.GetRoleManager().QueryRole(m_TableBankerUserID); if (!pBankerRole) { msg.BankerUserInfo.dwUserID = 0; msg.BankerUserInfo.GlobelSum = 0; msg.BankerUserInfo.NickName[0] = 0; msg.BankerUserInfo.dwFaceID = 0; msg.GameSum = 0; } else { msg.BankerUserInfo.dwUserID = m_TableBankerUserID; msg.BankerUserInfo.GlobelSum = pBankerRole->GetGlobelSum(); TCHARCopy(msg.BankerUserInfo.NickName, CountArray(msg.BankerUserInfo.NickName), pBankerRole->GetNickName(), _tcslen(pBankerRole->GetNickName())); msg.BankerUserInfo.dwFaceID = pBankerRole->GetFaceID(); msg.GameSum = m_TableBankerUseGameSum; } } //SendDataToAllTableRole(&msg); HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.begin(); for (; Iter != m_TableUserMap.end(); ++Iter) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(Iter->first); if (!pRole) continue; msg.dwUserID = Iter->first; pRole->SendDataToGameServer(&msg); } }
void CarManager::OnRoleCanelBanker(DWORD dwUserID) { //玩家下庄 Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter == m_TableUserMap.end()) { ASSERT(false); return; } MG_Cmd_CarRoleCanelBankerSeat msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarRoleCanelBankerSeat), sizeof(MG_Cmd_CarRoleCanelBankerSeat)); msg.dwUserID = dwUserID; msg.Result = false; //不是庄家不可以下庄 if (!Iter->second.IsBankerUser || dwUserID != m_TableBankerUserID) { if (pRole) pRole->SendDataToGameServer(&msg); return; } //让玩家下庄 Iter->second.IsBankerUser = false; msg.Result = true; if (m_TableStates == CTS_Begin) { //应该让玩家的金币 暂时冻结1分钟 //下注阶段 玩家下庄 立刻又系统补上 m_TableBankerUserID = 0; m_TableBankerUseGameSum = 0; OnBankerUserChange(); } else if (m_TableStates == CTS_End) { //开牌阶段 玩家下庄 直接下注 设置 //设置玩家下庄成功 m_IsNeedClearBankerInfo = true; } if (pRole) pRole->SendDataToGameServer(&msg); }
void AnnouncementManager::OnSendAllAnnouncementToGameServer(BYTE GameID) { //发送全部的公告到GameServer去 if (!m_IsFinish) { m_GameServerVec.push_back(GameID); return; } ServerClientData* pClient = g_FishServer.GetUserClientDataByIndex(GameID); if (!pClient) { ASSERT(false); return; } DWORD ArraySum = min(g_FishServer.GetFishConfig().GetSystemConfig().AnnouncementSum, m_AnnouncementList.size()); DWORD PageSize = sizeof(CG_Cmd_GetAllAnnouncement)+sizeof(AnnouncementOnce)*(ArraySum - 1); CG_Cmd_GetAllAnnouncement * msg = (CG_Cmd_GetAllAnnouncement*)malloc(PageSize); if (!msg) { ASSERT(false); return; } msg->SetCmdType(GetMsgType(Main_Announcement, CG_GetAllAnnouncement)); std::deque<AnnouncementOnce>::iterator Iter = m_AnnouncementList.begin(); for (DWORD i = 0; i<g_FishServer.GetFishConfig().GetSystemConfig().AnnouncementSum&& Iter != m_AnnouncementList.end(); ++Iter, ++i) { msg->Array[i] = *Iter; } std::vector<CG_Cmd_GetAllAnnouncement*> pVec; SqlitMsg(msg, PageSize, ArraySum,false, pVec); free(msg); if (!pVec.empty()) { std::vector<CG_Cmd_GetAllAnnouncement*>::iterator Iter = pVec.begin(); for (; Iter != pVec.end(); ++Iter) { g_FishServer.SendNetCmdToClient(pClient, *Iter); free(*Iter); } pVec.clear(); } }
void RoleRank::SendAllRankInfoToClient() { if (!m_pRole) { ASSERT(false); return; } if (!m_IsLoadDB) { m_IsSendToClient = true; return; } //将玩家排行榜的数据发送到客户端去 DWORD PageSize = sizeof(LC_Cmd_GetWeekRankInfo)+(m_RankInfo.size() - 1)*sizeof(tagRankWeekRankClient); LC_Cmd_GetWeekRankInfo* msg = (LC_Cmd_GetWeekRankInfo*)malloc(PageSize); if (!msg) { ASSERT(false); return; } msg->SetCmdType(GetMsgType(Main_Rank, LC_GetWeekRankInfo)); HashMap<BYTE, tagRankWeekRankClient>::iterator Iter = m_RankInfo.begin(); for (WORD i = 0; Iter != m_RankInfo.end(); ++Iter,++i) { msg->Array[i] = Iter->second; } std::vector<LC_Cmd_GetWeekRankInfo*> pVec; SqlitMsg(msg, PageSize, m_RankInfo.size(),true, pVec); free(msg); if (!pVec.empty()) { std::vector<LC_Cmd_GetWeekRankInfo*>::iterator Iter = pVec.begin(); for (; Iter != pVec.end(); ++Iter) { m_pRole->SendDataToClient(*Iter); free(*Iter); } pVec.clear(); } }
bool RS232::Manager() { // cehck for new incoming message if (Read ()) { // manage it switch (GetMsgType()) { case MSG_ACK_OK: Serial.println("ack receveived"); LED_OFF ; mWaitAck = false ; break ; case MSG_ACK_NOK: Serial.println("ack KO, send again"); delay (100) ; SendBufAgain () ; break ; case MSG_NORMAL: Serial.println("MSG NORMAL rcv !!!"); SendAck (MSG_ACK_OK) ; return true ; break ; } } if (mSomething2Send) { mSomething2Send = false ; Serial.println("Send MSG"); SendBufAgain() ; } if (mWaitAck) { // wait too long, send message again if ((millis() - mTimeAck) > MAX_WAIT_ACK) { // send again the buffer Serial.println("Send MSG AGAIN"); SendBufAgain () ; } } return false ; }
/*----------------------------------------------------------------------------*/ int RecvBatFileEDI(int cSock) /*----------------------------------------------------------------------------*/ { BOOL flag = TRUE; if (flag) { int flagDone = 0; int ret; if (flag) { /* * 업무개시 (당사발생) 0600/001 -> <- 0610/001 */ if (SendBatFileOPEN(cSock) < 0) { return -1; } } while (!flagDone) { /* * 수신한다. 수신데이터는 sDataLine */ *sDataLine = 0x00; if (RecvDataEDI(cSock) == FALSE) { return -1; } /* * 수신데이터에 따른 처리를 한다. */ switch (GetMsgType()) { case MSGTYPE_OPEN: ret = RecvBatFileOPEN(cSock); if (ret < 0) { return ret; } break; case MSGTYPE_FILE: ret = RecvBatFileFILE(cSock); if (ret < 0) { return ret; } break; case MSGTYPE_DATA: ret = RecvBatFileDATA(cSock); if (ret < 0) { return ret; } break; case MSGTYPE_MISS: ret = RecvBatFileMISS(cSock); if (ret < 0) { return ret; } break; case MSGTYPE_MDAT: ret = RecvBatFileMDAT(cSock); if (ret < 0) { return ret; } break; case MSGTYPE_CONT: ret = RecvBatFileCONT(cSock); if (ret < 0) { return ret; } break; case MSGTYPE_FEND: ret = RecvBatFileFEND(cSock); if (ret < 0) { return ret; } break; case MSGTYPE_DONE: ret = RecvBatFileDONE(cSock); if (ret < 0) { return ret; } flagDone = 1; break; } } } if (flag) { /* 세션을 종료한다. */ CSockFDCLR(cSock); if (flag) LOG(_FL_, 0, 0, "STATUS : close session"); } return 0; }
void ChannelLogonManager::OnHandleLogonResult(unsigned __int64 OnlyID, char* pData, DWORD Length) { if (!pData) { LogInfoToFile("LogonError.txt", TEXT("客户端渠道登陆 返回数据为空")); ASSERT(false); return; } HashMap < unsigned __int64, LogonTempInfo>::iterator Iter = m_RoleLogonMap.find(OnlyID); if (Iter == m_RoleLogonMap.end()) { ASSERT(false); SYSTEMTIME pTime; GetLocalTime(&pTime); g_FishServer.ShowInfoToWin("玩家渠道登陆数据不存在 Time: %02d:%02d:%02d", pTime.wHour, pTime.wMinute, pTime.wSecond); LogInfoToFile("LogonError.txt", TEXT("客户端渠道登陆 渠道数据不存在")); return; } ServerClientData* pClient = g_FishServer.GetUserClientDataByIndex(static_cast<BYTE>(Iter->second.ClientID)); if (!pClient) { free(Iter->second.pMsg); m_RoleLogonMap.erase(Iter); LogInfoToFile("LogonError.txt", TEXT("客户端渠道登陆 客户端不存在")); //ASSERT(false); return; } DWORD PageSize = sizeof(OL_Cmd_ChannelLogon)+(Iter->second.pMsg->channelInfo.Sum - 1)*sizeof(BYTE); OL_Cmd_ChannelLogon* msg = (OL_Cmd_ChannelLogon*)malloc(PageSize); msg->SetCmdType(GetMsgType(Main_Logon, OL_ChannelLogon)); msg->SetCmdSize(ConvertDWORDToWORD(PageSize)); DWORD DataLength = (Iter->second.pMsg->channelInfo.Sum - 1)*sizeof(BYTE)+sizeof(ChannelUserInfo); memcpy_s(&msg->channelInfo, DataLength, &Iter->second.pMsg->channelInfo, DataLength); msg->ClientID = Iter->second.pMsg->ClientID; msg->PlateFormID = Iter->second.pMsg->PlateFormID; msg->ChannelID = Iter->second.ChannelID;//玩家的平台ID TCHARCopy(msg->MacAddress, CountArray(msg->MacAddress), Iter->second.pMsg->MacAddress, _tcslen(Iter->second.pMsg->MacAddress)); free(Iter->second.pMsg); m_RoleLogonMap.erase(Iter); if (Length == 0) { LogInfoToFile("LogonError.txt", TEXT("客户端渠道登陆 返回长度为0")); msg->Result = false; g_FishServer.SendNetCmdToClient(pClient, msg); free(msg); return; } else if (strcmp(pData, "true") == 0) { msg->Result = true; g_FishServer.SendNetCmdToClient(pClient, msg); free(msg); return; } else if (strcmp(pData, "false") == 0) { msg->Result = false; g_FishServer.SendNetCmdToClient(pClient, msg); free(msg); return; } else { LogInfoToFile("LogonError.txt", TEXT("客户端渠道登陆 渠道返回数据异常")); ASSERT(false); msg->Result = false; g_FishServer.SendNetCmdToClient(pClient, msg); free(msg); return; } }
int EasyProtocol::GetMessageType() { std::string sMessageType = root[EASY_TAG_ROOT][EASY_TAG_HEADER][EASY_TAG_MESSAGE_TYPE].asString(); return GetMsgType(sMessageType); }
void CarManager::OnRoleBetGlobelByLog(DWORD dwUserID, DWORD AddGlobelArray[MAX_CAR_ClientSum]) { //玩家进行继续押注 Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pRole) { ASSERT(false); return; } MG_Cmd_CarRoleBetGlobelByLog msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarRoleBetGlobelByLog), sizeof(MG_Cmd_CarRoleBetGlobelByLog)); msg.dwUserID = dwUserID; DWORD AllGlobel = 0; // 下注的总金币数量 for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) { AllGlobel += AddGlobelArray[i]; msg.betGlobel[i] = AddGlobelArray[i]; } msg.AllGlobel = AllGlobel; HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter == m_TableUserMap.end()) { ASSERT(false); pRole->SendDataToGameServer(&msg); return; } if (pRole->GetGlobelSum() < AllGlobel) { ASSERT(false); pRole->SendDataToGameServer(&msg); return; } if (m_TableStates != CTS_Begin) { //开牌阶段 无法下注 pRole->SendDataToGameServer(&msg); return; } if (m_TableBankerUserID == dwUserID) { //庄家不可以下注 pRole->SendDataToGameServer(&msg); return; } DWORD RoleBetAllGlobel = 0; for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) { RoleBetAllGlobel += Iter->second.BetGlobel[i]; } if (RoleBetAllGlobel + AllGlobel> g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.MaxAddGlobel) { pRole->SendDataToGameServer(&msg); return; } for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) { if (!IsCanAddGlobel(AddGlobelArray[i], i)) { pRole->SendDataToGameServer(&msg); return; } } //可以下注了 msg.Result = true; //1.扣除玩家金币 pRole->OnChangeRoleGlobelSum(pRole->GetGlobelSum() - AllGlobel); //2.添加下注区数据 for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) { Iter->second.BetGlobel[i] += AddGlobelArray[i]; m_TableBetAreaGlobel[i] += AddGlobelArray[i]; if (!Iter->second.IsRobot) g_DBLogManager.LogToDB(dwUserID, LogType::LT_Car, AddGlobelArray[i], i, TEXT("玩家转盘下注"), SendLogDB);//Param 表示 下注区 } pRole->SendDataToGameServer(&msg); if (Iter->second.IsInVipSeat) { for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) { if (AddGlobelArray[i] == 0) continue; MG_Cmd_CarVipSeatGlobelChange msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarVipSeatGlobelChange), sizeof(MG_Cmd_CarVipSeatGlobelChange)); msg.VipSeat = Iter->second.VipSeat; msg.GlobelSum = AddGlobelArray[i]; msg.Index = i; HashMap<DWORD, tagCarRoleInfo>::iterator IterRole = m_TableUserMap.begin(); for (; IterRole != m_TableUserMap.end(); ++IterRole) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(IterRole->first); if (!pRole) continue; msg.dwUserID = IterRole->first; pRole->SendDataToGameServer(&msg); } } } }
void CarManager::OnTableJoinEnd() { //当比赛开牌的时候 //进行结算的时候 UINT64 TotalAllAddGlobel = 0; for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) TotalAllAddGlobel += m_TableBetAreaGlobel[i]; //根据概率 生成一个 结果 m_TableResult = GetTableResult(m_TableResultIndex); //控制优先 INT64 SystemGlobel = GetSystemGlobelChange(); INT64 BrandUserGlobel = GetBrandUserGlobelChange(); if (g_FishServer.GetCarControl().NeedControl()) { //m_TableResult= for (int i = 0; i < 20; i++) { BYTE byPos = rand() % g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.CarValueVec.size(); tagCarValue pItem = g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.CarValueVec[byPos]; if (pItem.TypeID == g_FishServer.GetCarControl().GetSuitResult()) { m_TableResult = pItem.TypeID; m_TableResultIndex = byPos; break; } } SystemGlobel = GetSystemGlobelChange(); BrandUserGlobel = GetBrandUserGlobelChange(); g_FishServer.GetCarControl().CompleteControl(); } else { if (m_SystemGlobelSum < 0 || (m_SystemGlobelSum + SystemGlobel) < 0) { SystemGlobel = ChangeResultBySystem(); BrandUserGlobel = GetBrandUserGlobelChange();//根据结果计算庄家金币的变化 } } //3.干涉完毕后 我们进行处理 MG_Cmd_CarTableJoinEnd msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarTableJoinEnd), sizeof(MG_Cmd_CarTableJoinEnd)); for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) msg.TableBetAreaGlobel[i] = m_TableBetAreaGlobel[i]; msg.TableResultIndex = m_TableResultIndex; //m_CarResultLog.SetResult(m_TableAreaData[m_TableResult]);//根据当局的结果设置数据 //设置结构 m_CarResultLog.SetResult(m_TableResult); msg.TableGameSum = m_CarResultLog.LogSum; msg.TableResultLog = m_CarResultLog.ResultLog; //将当前玩家的金币发送到客户端去 msg.BankerUserGlobelInfo.dwUserID = m_TableBankerUserID; if (m_TableBankerUserID != 0) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(m_TableBankerUserID); if (pRole) { //设置庄家的金币 应该是之后的金币数量 if (pRole->GetGlobelSum() + BrandUserGlobel < 0) pRole->OnChangeRoleGlobelSum(0); else pRole->OnChangeRoleGlobelSum(pRole->GetGlobelSum() + static_cast<DWORD>(BrandUserGlobel)); msg.BankerUserGlobelInfo.dwGlobelSum = pRole->GetGlobelSum(); } else { msg.BankerUserGlobelInfo.dwUserID = 0; msg.BankerUserGlobelInfo.dwGlobelSum = 0; } } if (m_TableWriteBankerVec.empty()) { for (BYTE i = 0; i < MAX_CARSHOWBRAND_Sum; ++i) { msg.BankerListGlobelInfo[i].dwUserID = 0; msg.BankerListGlobelInfo[i].dwGlobelSum = 0; } } else { vector<DWORD>::iterator Iter = m_TableWriteBankerVec.begin(); for (BYTE i = 0; Iter != m_TableWriteBankerVec.end() && i < MAX_CARSHOWBRAND_Sum;) { Role* pDestRole = g_FishServer.GetRoleManager().QueryRole(*Iter); if (!pDestRole) { //++i; ++Iter; continue; } msg.BankerListGlobelInfo[i].dwUserID = *Iter; msg.BankerListGlobelInfo[i].dwGlobelSum = pDestRole->GetGlobelSum(); ++i; ++Iter; } } for (BYTE i = 0; i < MAX_CARVIPSEAT_Sum; ++i) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(m_VipSeatVec[i].dwUserID); if (pRole) { msg.VipGlobelInfo[i].dwUserID = pRole->GetRoleID(); msg.VipGlobelInfo[i].dwGlobelSum = pRole->GetGlobelSum(); } else { msg.VipGlobelInfo[i].dwUserID = 0; msg.VipGlobelInfo[i].dwGlobelSum = 0; } } HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.begin(); for (; Iter != m_TableUserMap.end(); ++Iter) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(Iter->first); if (!pRole) continue; msg.dwUserID = Iter->first; if (m_TableBankerUserID != 0 && msg.dwUserID == m_TableBankerUserID) { msg.AddGlobelSum = BrandUserGlobel; } else { //处理当前玩家的数据 int AddGlobel = 0; for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) { if (Iter->second.BetGlobel[i] == 0) continue; //计算单个玩家的金币变化 //玩家下过注 SHORT Rate = GetBrandRateValue(i); AddGlobel += Iter->second.BetGlobel[i] * Rate;//计算玩家金币改变 Iter->second.BetGlobel[i] = 0;//清空玩家下注的金币数量 } if (pRole->GetGlobelSum() + AddGlobel < 0) pRole->OnChangeRoleGlobelSum(0); else pRole->OnChangeRoleGlobelSum(pRole->GetGlobelSum() + AddGlobel); msg.AddGlobelSum = AddGlobel;//玩家输赢金币的数量 if (AddGlobel == 0 && Iter->second.IsInVipSeat && m_VipSeatVec[Iter->second.VipSeat].dwUserID == Iter->first) { //当前玩家未下注 ++m_VipSeatVec[Iter->second.VipSeat].NonBetGlobelSum; if (m_VipSeatVec[Iter->second.VipSeat].NonBetGlobelSum >= g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.VipNonBetSum) { if ((pRole->GetRoleInfo().ParticularStates & ParticularState_CarVip) != 0) { m_VipSeatVec[Iter->second.VipSeat].NonBetGlobelSum = 0; } else OnRoleLeaveVipSeat(Iter->first);//玩家离开VIP席位 } } } pRole->SendDataToGameServer(&msg); } m_SystemGlobelSum += SystemGlobel; if (TotalAllAddGlobel != 0) //无人下注的时候 无须进行递减 m_SystemGlobelSum = static_cast<INT64>(m_SystemGlobelSum * g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.GetChangeGlobelRateValue()); if (m_TableBankerUserID != 0) { if (BrandUserGlobel >= 0) g_DBLogManager.LogToDB(m_TableBankerUserID, LT_Car, 1, static_cast<DWORD>(BrandUserGlobel), TEXT("玩家坐庄宝马奔驰获得金币"), SendLogDB); else g_DBLogManager.LogToDB(m_TableBankerUserID, LT_Car, 0, static_cast<DWORD>(BrandUserGlobel*-1), TEXT("玩家坐庄宝马奔驰失去金币"), SendLogDB); } //存储到数据库里面去 g_DBLogManager.LogCarInfoToDB(m_TableBankerUserID, m_TableBetAreaGlobel, m_TableResult, SystemGlobel, m_SystemGlobelSum, m_TableUserMap.size(), SendLogDB); //判断当前在排队列表里的玩家 MG_Cmd_CarWriteBankerUserGlobelMsg msgSend; SetMsgInfo(msgSend, GetMsgType(Main_Car, MG_CarWriteBankerUserGlobelMsg), sizeof(MG_Cmd_CarWriteBankerUserGlobelMsg)); vector<DWORD>::iterator IterVec = m_TableWriteBankerVec.begin(); for (; IterVec != m_TableWriteBankerVec.end(); ++IterVec) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(*IterVec); if (!pRole) continue; if (pRole->GetGlobelSum() < g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.JoinBankerGlobelSum) { msgSend.dwUserID = *IterVec; pRole->SendDataToGameServer(&msgSend); } } m_robotmanager.EndGame(); }
void CarManager::OnRoleJoinCarTable(DWORD dwUserID) { //玩家进入试图进入牛牛桌子 Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pRole) { ASSERT(false); return; } MG_Cmd_CarRoleJoinTable msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarRoleJoinTable), sizeof(MG_Cmd_CarRoleJoinTable)); msg.dwUserID = dwUserID; msg.Result = false; HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter != m_TableUserMap.end()) { //立刻让玩家离开 OnRoleLeaveCarTable(dwUserID); } if (pRole->GetGlobelSum() < g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.JoinGlobelSum) { pRole->SendDataToGameServer(&msg); return; } if (m_TableStates == CTS_WriteBegin) { //因为有人进入了 SetTableStates(CTS_Begin); OnClearTableInfo();//清理桌子上的数据 } msg.Result = true; tagCarRoleInfo pInfo; pInfo.UserID = dwUserID; for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) pInfo.BetGlobel[i] = 0; pInfo.IsBankerUser = false; pInfo.IsInWriteBanakerVec = false; pInfo.IsInVipSeat = false; pInfo.VipSeat = 0; pInfo.IsRobot = g_FishServer.GetRobotManager().IsRobot(dwUserID); m_TableUserMap.insert(HashMap<DWORD, tagCarRoleInfo>::value_type(dwUserID, pInfo)); //继续设置数据到命令里面 msg.TableStates = m_TableStates; DWORD NowTime = timeGetTime(); if (m_TableStates == CTS_Begin) msg.TableStatesUpdateSec = static_cast<BYTE>((g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.BeginWriteSec * 1000 - (NowTime - m_TableStatesLog)) / 1000); else if (m_TableStates == CTS_End) msg.TableStatesUpdateSec = static_cast<BYTE>((g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.EndWriteSec * 1000 - (NowTime - m_TableStatesLog)) / 1000); else msg.TableStatesUpdateSec = 0; for (BYTE i = 0; i < MAX_CAR_ClientSum; ++i) { msg.TableBetAreaGlobel[i] = m_TableBetAreaGlobel[i]; } msg.TableBankerInfo.dwUserID = m_TableBankerUserID; msg.TableBankerUseGameSum = m_TableBankerUseGameSum; if (msg.TableBankerInfo.dwUserID != 0) { Role* pBankerRole = g_FishServer.GetRoleManager().QueryRole(msg.TableBankerInfo.dwUserID); if (!pBankerRole) { msg.TableBankerInfo.dwUserID = 0; msg.TableBankerInfo.dwFaceID = 0; msg.TableBankerUseGameSum = 0; msg.TableBankerInfo.NickName[0] = 0; } else { msg.TableBankerInfo.GlobelSum = pBankerRole->GetGlobelSum(); msg.TableBankerInfo.dwFaceID = pBankerRole->GetFaceID(); TCHARCopy(msg.TableBankerInfo.NickName, CountArray(msg.TableBankerInfo.NickName), pBankerRole->GetNickName(), _tcslen(pBankerRole->GetNickName())); } } for (BYTE i = 0; i < MAX_CARSHOWBRAND_Sum; ++i) { msg.TableWriteBankerList[i].dwUserID = 0; msg.TableWriteBankerList[i].GlobelSum = 0; msg.TableWriteBankerList[i].NickName[0] = 0; msg.TableWriteBankerList[i].dwFaceID = 0; } if (!m_TableWriteBankerVec.empty()) { vector<DWORD>::iterator Iter = m_TableWriteBankerVec.begin(); for (BYTE i = 0; Iter != m_TableWriteBankerVec.end() && i < MAX_CARSHOWBRAND_Sum;) { Role* pDestRole = g_FishServer.GetRoleManager().QueryRole(*Iter); if (!pDestRole) { //++i; ++Iter; continue; } msg.TableWriteBankerList[i].dwUserID = *Iter; msg.TableWriteBankerList[i].GlobelSum = pDestRole->GetGlobelSum(); msg.TableWriteBankerList[i].dwFaceID = pDestRole->GetFaceID(); TCHARCopy(msg.TableWriteBankerList[i].NickName, CountArray(msg.TableWriteBankerList[i].NickName), pDestRole->GetNickName(), _tcslen(pDestRole->GetNickName())); ++i; ++Iter; } } //贵宾席的数据 for (BYTE i = 0; i < MAX_CARVIPSEAT_Sum; ++i) { if (m_VipSeatVec[i].dwUserID == 0) { msg.VipSeatList[i].dwUserID = 0; msg.VipSeatList[i].GlobelSum = 0; msg.VipSeatList[i].NickName[0] = 0; msg.VipSeatList[i].dwFaceID = 0; } else { Role* pDestRole = g_FishServer.GetRoleManager().QueryRole(m_VipSeatVec[i].dwUserID); if (pDestRole) { msg.VipSeatList[i].dwUserID = m_VipSeatVec[i].dwUserID; msg.VipSeatList[i].GlobelSum = pDestRole->GetGlobelSum(); msg.VipSeatList[i].dwFaceID = pDestRole->GetFaceID(); TCHARCopy(msg.VipSeatList[i].NickName, CountArray(msg.VipSeatList[i].NickName), pDestRole->GetNickName(), _tcslen(pDestRole->GetNickName())); } else { msg.VipSeatList[i].dwUserID = 0; msg.VipSeatList[i].GlobelSum = 0; msg.VipSeatList[i].NickName[0] = 0; msg.VipSeatList[i].dwFaceID = 0; } } } msg.TableGameSum = m_CarResultLog.LogSum; msg.TableResultLog = m_CarResultLog.ResultLog; msg.TableResultIndex = m_TableResultIndex; pRole->SendDataToGameServer(&msg); }
void CarManager::OnRoleJoinVipSeat(DWORD dwUserID, BYTE VipSeatIndex) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pRole) { ASSERT(false); return; } HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter == m_TableUserMap.end()) { ASSERT(false); return; } MG_Cmd_CarRoleJoinVipSeat msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarRoleJoinVipSeat), sizeof(MG_Cmd_CarRoleJoinVipSeat)); msg.Result = false; msg.DestUserInfo.dwUserID = dwUserID; msg.DestUserInfo.dwFaceID = pRole->GetFaceID(); msg.DestUserInfo.GlobelSum = pRole->GetGlobelSum(); TCHARCopy(msg.DestUserInfo.NickName, CountArray(msg.DestUserInfo.NickName), pRole->GetNickName(), _tcslen(pRole->GetNickName())); msg.dwUserID = dwUserID; msg.VipSeatIndex = VipSeatIndex; if (Iter->second.IsBankerUser)//庄家不可以做VIP席位 { pRole->SendDataToGameServer(&msg); return; } if (Iter->second.IsInVipSeat) { pRole->SendDataToGameServer(&msg); return; } if (pRole->GetVipLevel() == 0) { pRole->SendDataToGameServer(&msg); return; } if (VipSeatIndex >= MAX_CARVIPSEAT_Sum) { pRole->SendDataToGameServer(&msg); return; } if (m_VipSeatVec[VipSeatIndex].dwUserID != 0) { Role* pDestRole = g_FishServer.GetRoleManager().QueryRole(m_VipSeatVec[VipSeatIndex].dwUserID); if (pDestRole) { if (pDestRole->GetVipLevel() >= pRole->GetVipLevel()) { pRole->SendDataToGameServer(&msg); return; } else { //告诉目标玩家 被踢了 MG_Cmd_CarRoleBeLeaveVipSeat msgLeave; SetMsgInfo(msgLeave, GetMsgType(Main_Car, MG_CarRoleBeLeaveVipSeat), sizeof(MG_Cmd_CarRoleBeLeaveVipSeat)); msgLeave.dwUserID = m_VipSeatVec[VipSeatIndex].dwUserID; msgLeave.DestRoleInfo.dwUserID = dwUserID; msgLeave.DestRoleInfo.dwFaceID = pRole->GetFaceID(); msgLeave.DestRoleInfo.GlobelSum = pRole->GetGlobelSum(); TCHARCopy(msgLeave.DestRoleInfo.NickName, CountArray(msgLeave.DestRoleInfo.NickName), pRole->GetNickName(), _tcslen(pRole->GetNickName())); pDestRole->SendDataToGameServer(&msgLeave); } } } //玩家可以做上Vip席位 m_VipSeatVec[VipSeatIndex].dwUserID = dwUserID; m_VipSeatVec[VipSeatIndex].NonBetGlobelSum = 0; Iter->second.IsInVipSeat = true; Iter->second.VipSeat = VipSeatIndex; msg.Result = true; HashMap<DWORD, tagCarRoleInfo>::iterator IterSend = m_TableUserMap.begin();//Vip席位的改变发送给全部玩家 for (; IterSend != m_TableUserMap.end(); ++IterSend) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(IterSend->first); if (!pRole) continue; msg.dwUserID = IterSend->first; pRole->SendDataToGameServer(&msg); } }
void CarManager::OnRoleBetGlobel(DWORD dwUserID, BYTE BetIndex, DWORD AddGlobel) { //玩家下注 Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pRole) { ASSERT(false); return; } MG_Cmd_CarRoleBetGlobel msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarRoleBetGlobel), sizeof(MG_Cmd_CarRoleBetGlobel)); msg.dwUserID = dwUserID; msg.AddGlobel = AddGlobel; msg.Index = BetIndex; msg.Result = false; if (BetIndex >= MAX_CAR_ClientSum) { pRole->SendDataToGameServer(&msg); ASSERT(false); return; } HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.find(dwUserID); if (Iter == m_TableUserMap.end()) { ASSERT(false); pRole->SendDataToGameServer(&msg); return; } if (pRole->GetGlobelSum() < AddGlobel) { ASSERT(false); pRole->SendDataToGameServer(&msg); return; } if (m_TableStates != CTS_Begin) { //开牌阶段 无法下注 pRole->SendDataToGameServer(&msg); return; } if (m_TableBankerUserID == dwUserID) { //庄家不可以下注 pRole->SendDataToGameServer(&msg); return; } bool IsCanBetGlobel = true; DWORD RoleBetAllGlobel = 0; UINT64 TableBetAllGbel = 0; for (BYTE i = 0; i<MAX_CAR_ClientSum; ++i) { RoleBetAllGlobel += Iter->second.BetGlobel[i]; TableBetAllGbel += m_TableBetAreaGlobel[i]; } if (RoleBetAllGlobel + AddGlobel > g_FishServer.GetFishConfig().GetFishMiNiGameConfig().carConfig.MaxAddGlobel)//当前下注区的金币太多 { pRole->SendDataToGameServer(&msg); return; } //不可以操出庄家的限制 if (!IsCanAddGlobel(AddGlobel, BetIndex)) { pRole->SendDataToGameServer(&msg); return; } //可以下注了 msg.Result = true; //1.扣除玩家金币 pRole->OnChangeRoleGlobelSum(pRole->GetGlobelSum() - AddGlobel); //2.添加下注区数据 Iter->second.BetGlobel[BetIndex] += AddGlobel; m_TableBetAreaGlobel[BetIndex] += AddGlobel; if (!Iter->second.IsRobot) g_DBLogManager.LogToDB(dwUserID, LogType::LT_Car, AddGlobel, BetIndex, TEXT("玩家转盘下注"), SendLogDB);//Param 表示 下注区 pRole->SendDataToGameServer(&msg); if (Iter->second.IsInVipSeat) { MG_Cmd_CarVipSeatGlobelChange msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarVipSeatGlobelChange), sizeof(MG_Cmd_CarVipSeatGlobelChange)); msg.VipSeat = Iter->second.VipSeat; msg.GlobelSum = AddGlobel; msg.Index = BetIndex; HashMap<DWORD, tagCarRoleInfo>::iterator IterRole = m_TableUserMap.begin(); for (; IterRole != m_TableUserMap.end(); ++IterRole) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(IterRole->first); if (!pRole) continue; msg.dwUserID = IterRole->first; pRole->SendDataToGameServer(&msg); } } }
void FishPackageManager::OnOpenFishPackage(CRoleEx* pRole, DWORD ItemOnlyID, DWORD PackageItemID) { if (!pRole) { ASSERT(false); return; } LC_Cmd_OpenPackage msg; SetMsgInfo(msg, GetMsgType(Main_Package, LC_OpenPackage), sizeof(LC_Cmd_OpenPackage)); msg.Result = false; if (!g_FishServer.GetFishConfig().ItemIsExists(PackageItemID)) { pRole->SendDataToClient(&msg); ASSERT(false); return; } if (!pRole->GetItemManager().OnDelUserItem(ItemOnlyID,PackageItemID, 1))//从背包移除 但是玩家刚获得的时候 无须进行处理 { ASSERT(false); pRole->SendDataToClient(&msg); return; } //根据宝箱的情况 打开宝箱 HashMap<DWORD, tagFishPackage>::iterator Iter= g_FishServer.GetFishConfig().GetFishPackageConfig().m_PackageMap.find(PackageItemID); if (Iter == g_FishServer.GetFishConfig().GetFishPackageConfig().m_PackageMap.end()) { ASSERT(false); pRole->SendDataToClient(&msg); return; } if (Iter->second.ItemVec.empty()) { ASSERT(false); pRole->SendDataToClient(&msg); return; } DWORD PageSize = sizeof(LC_Cmd_OpenPackage)+sizeof(WORD)* (Iter->second.ItemVec.size() - 1); CheckMsgSize(PageSize); LC_Cmd_OpenPackage* msgOpen = (LC_Cmd_OpenPackage*)malloc(PageSize); if (!msgOpen) { ASSERT(false); return; } msgOpen->SetCmdSize(ConvertDWORDToWORD(PageSize)); msgOpen->SetCmdType(GetMsgType(Main_Package, LC_OpenPackage)); msgOpen->Result = true; msgOpen->RewardSum = ConvertDWORDToBYTE(Iter->second.ItemVec.size()); vector<tagFishPackageGroup>::iterator IterGroup = Iter->second.ItemVec.begin(); for (int i =0; IterGroup != Iter->second.ItemVec.end(); ++IterGroup) { if (IterGroup->PackageItemVec.empty()) continue; //随机参数一个值 DWORD RankValue = RandUInt() % IterGroup->MaxRankValue; vector<tagFishPackageItem>::iterator IterItem = IterGroup->PackageItemVec.begin(); for (; IterItem != IterGroup->PackageItemVec.end(); ++IterItem) { if (RankValue <= IterItem->RankValue) { //添加物品了 pRole->OnAddRoleRewardByRewardID(IterItem->RewardID,TEXT("打开包裹物品 获得奖励")); msgOpen->RewardID[i] = IterItem->RewardID; break; } } ++i; } pRole->SendDataToClient(msgOpen); free(msgOpen); }
void CarManager::OnRoleGetNormalInfoByPage(DWORD dwUserID, DWORD Page) { Role* pRole = g_FishServer.GetRoleManager().QueryRole(dwUserID); if (!pRole) { ASSERT(false); return; } HashMap<DWORD, tagCarRoleInfo>::iterator IterRole = m_TableUserMap.find(dwUserID); if (IterRole == m_TableUserMap.end()) { ASSERT(false); return; } DWORD BeginIndex = Page * MAX_CARNORMAL_PAGESUM; DWORD EndIndex = (Page + 1)* MAX_CARNORMAL_PAGESUM - 1; MG_Cmd_CarGetNormalSeatInfo msg; SetMsgInfo(msg, GetMsgType(Main_Car, MG_CarGetNormalSeatInfo), sizeof(MG_Cmd_CarGetNormalSeatInfo)); msg.dwUserID = dwUserID; msg.Page = Page; msg.TotalRoleSum = m_TableUserMap.size(); for (BYTE i = 0; i < MAX_CARVIPSEAT_Sum; ++i) { if (m_VipSeatVec[i].dwUserID != 0) --msg.TotalRoleSum; } if (m_TableBankerUserID != 0) --msg.TotalRoleSum; for (BYTE i = 0; i < MAX_CARNORMAL_PAGESUM; ++i) { msg.Array[i].dwFaceID = 0; msg.Array[i].dwUserID = 0; msg.Array[i].GlobelSum = 0; msg.Array[i].NickName[0] = 0; } HashMap<DWORD, tagCarRoleInfo>::iterator Iter = m_TableUserMap.begin(); for (DWORD Index = 0; Iter != m_TableUserMap.end(); ++Iter) { if (Iter->second.IsInVipSeat || Iter->second.IsBankerUser) continue; Role* pDestRole = g_FishServer.GetRoleManager().QueryRole(Iter->first); if (!pDestRole) continue; if (Index >= BeginIndex) { //将玩家记录到数据里面去 msg.Array[Index - BeginIndex].dwUserID = pDestRole->GetRoleID(); msg.Array[Index - BeginIndex].dwFaceID = pDestRole->GetFaceID(); msg.Array[Index - BeginIndex].GlobelSum = pDestRole->GetGlobelSum(); TCHARCopy(msg.Array[Index - BeginIndex].NickName, CountArray(msg.Array[Index - BeginIndex].NickName), pDestRole->GetNickName(), _tcslen(pDestRole->GetNickName())); if (Index == EndIndex) { pRole->SendDataToGameServer(&msg); return; } } ++Index; } //目前还没有准备好 pRole->SendDataToGameServer(&msg);//人数不够 或者 人数为空的 return; }