Esempio n. 1
0
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);
		}
	}
}
Esempio n. 2
0
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();
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 7
0
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);
	}
}
Esempio n. 8
0
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);
	}
}
Esempio n. 9
0
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;
}
Esempio n. 10
0
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);
	}
}
Esempio n. 11
0
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);
}
Esempio n. 12
0
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;

}
Esempio n. 13
0
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);
}
Esempio n. 15
0
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);
	}
}
Esempio n. 16
0
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();
	}
}
Esempio n. 18
0
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();
	}
}
Esempio n. 19
0
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 ;
}
Esempio n. 20
0
/*----------------------------------------------------------------------------*/
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;
	}
}
Esempio n. 22
0
int EasyProtocol::GetMessageType()
{
	std::string sMessageType = root[EASY_TAG_ROOT][EASY_TAG_HEADER][EASY_TAG_MESSAGE_TYPE].asString();	

	return GetMsgType(sMessageType);
}
Esempio n. 23
0
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);
			}
		}
	}
}
Esempio n. 24
0
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();
}
Esempio n. 25
0
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);
}
Esempio n. 26
0
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);
	}
}
Esempio n. 27
0
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);
}
Esempio n. 29
0
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;
}