⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 com.cpp

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	CDatabase* pDB = g_DBSession[0].GetDB( db_index );
	if( !pDB ) return;
	
	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, pDB->m_hdbc, &hstmt );
	if (retcode!=SQL_SUCCESS)
	{
		return;
	}

	retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, SQL_NTS);
	if (retcode ==SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
	{
	}
	else if (retcode==SQL_ERROR)
	{
//		DisplayErrorMsg(hstmt);
	}
	else if (retcode==SQL_NO_DATA)
	{
	}
	
	if (hstmt!=NULL) SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);

	g_DBSession[0].ReleaseDB(db_index);

	return;
}

void COM::CheckFortressWarTime()
{
	SYSTEMTIME guildTime;
	GetLocalTime(&guildTime);
	DWORD dwCurrTick = GetTickCount();					// 力茄 矫埃郴狼 辨靛傈阑 眉农...

	COleDateTime CurrTime = COleDateTime(guildTime);
	SYSTEMTIME st;

	int i, j;
	int nTime = 0;
	static int nState = 0;
	CString strMsg;

	CheckViolenceInFortress();

	for(i = 0; i < g_arGuildFortress.GetSize(); i++)
	{
		if(!g_arGuildFortress[i]) continue;

		int time = 0;
		CTimeSpan DiffTime;

		if(g_arGuildFortress[i]->m_lUsed == 0) 
		{
			st = g_arGuildFortress[i]->m_wLastWarTime;
			COleDateTime LastTime(st.wYear, st.wMonth, st.wDay, st.wHour, 0, 0);

			if(CurrTime.m_status == COleDateTime::valid && LastTime.m_status == COleDateTime::valid)
			{
				CTime curr(CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), 0, 0);
				CTime last(LastTime.GetYear(), LastTime.GetMonth(), LastTime.GetDay(), LastTime.GetHour(), 0, 0);
				DiffTime = curr - last;			
			}

			if(g_arGuildFortress[i]->m_iGuildSid < SYSTEM_GUILD_BAND && g_arGuildFortress[i]->m_iGuildSid > 0)		// 惑痢俊 林牢捞 乐绊
			{
				time = DiffTime.GetTotalHours();
				if(time >= UPDATE_GUILD_INVEN_TIME)			//12盒付促
//				time = DiffTime.GetTotalMinutes();
//				if(time >= 5)			//12盒付促
				{
					SetFortressWarTime(g_arGuildFortress[i]);					

					UpdateFortress2DB(g_arGuildFortress[i]);

					g_arGuildFortress[i]->m_iGuildDN = 0;
					GetLocalTime(&g_arGuildFortress[i]->m_wLastWarTime);
				}
			}
		}

		if(g_arGuildFortress[i]->m_lUsed == 0 && g_arGuildFortress[i]->m_tWarType == GUILD_WAR_DECISION)
		{
			if(guildTime.wYear == g_arGuildFortress[i]->m_wPlanWarTime.wYear)
			{
				if(guildTime.wMonth == g_arGuildFortress[i]->m_wPlanWarTime.wMonth)
				{
					if(guildTime.wDay == g_arGuildFortress[i]->m_wPlanWarTime.wDay)
					{
						if(guildTime.wHour + 1 == g_arGuildFortress[i]->m_wPlanWarTime.wHour)
						{
							int tt = g_arGuildFortress[i]->m_iStandingTime;
							if(guildTime.wMinute == g_arGuildFortress[i]->m_iStandingTime)
							{
								nTime = 60 - guildTime.wMinute;
								if(nTime > 0)
								{
									if(g_arGuildFortress[i]->m_sFortressID == 1000)
									{
										strMsg.Format( IDS_USER_START_LUINET_SOON, nTime);
									}
									else if(g_arGuildFortress[i]->m_sFortressID == 1001)
									{
										strMsg.Format( IDS_USER_START_SANAD_SOON, nTime);
									}
									else if(g_arGuildFortress[i]->m_sFortressID == 1002)
									{
										strMsg.Format( IDS_USER_START_ZAMELLYA_SOON, nTime);
									}
									Announce((LPTSTR)(LPCTSTR)strMsg, SYSTEM_ANNOUNCE);
								}
								g_arGuildFortress[i]->m_iStandingTime += 3;
							}
						}

						if(guildTime.wHour == g_arGuildFortress[i]->m_wPlanWarTime.wHour)
						{
							if(guildTime.wMinute == 0 && g_arGuildFortress[i]->m_lUsed == 0)// 辨靛傈 矫累...
							{	
								if(dwCurrTick - g_arGuildFortress[i]->m_dwStartTick < 70000) continue;

								g_arGuildFortress[i]->m_iStandingTime = 50;
								InterlockedExchange(&g_arGuildFortress[i]->m_lUsed, 1);

								g_arGuildFortress[i]->m_dwStartTick = dwCurrTick;
								GetLocalTime(&g_arGuildFortress[i]->m_wLastWarTime);
								SendFortressWarBegin(g_arGuildFortress[i]);
							}
						}
					}
				}
			}
		}
		else if(g_arGuildFortress[i]->m_lUsed == 1) 
		{
			SYSTEMTIME ut;
			ut = g_arGuildFortress[i]->m_wLastWarTime;
			COleDateTime LastTime(ut.wYear, ut.wMonth, ut.wDay, ut.wHour, 0, 0);

			if(dwCurrTick - g_arGuildFortress[i]->m_dwStartTick > 60000 * g_dwFortressTime )	// 60盒 抛胶飘 * 2矫埃
			{				// 辨靛傈捞 场车促.
				InterlockedExchange(&g_arGuildFortress[i]->m_lUsed, 0);
				g_arGuildFortress[i]->m_dwStartTick = dwCurrTick;
				SendFortressWarEnd(g_arGuildFortress[i]);
				GetLocalTime(&g_arGuildFortress[i]->m_wLastWarTime);
			}
			else if(CurrTime.m_status == COleDateTime::valid && LastTime.m_status == COleDateTime::valid)
			{
				CTime curr(CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond());
				CTime last(LastTime.GetYear(), LastTime.GetMonth(), LastTime.GetDay(), LastTime.GetHour(), LastTime.GetMinute(), LastTime.GetSecond());
				DiffTime = curr - last;	
				
				nTime = g_dwFortressTime - DiffTime.GetTotalMinutes();

				for(j = 0; j < GUILD_WAR_MAX_MSG_TIMER; j++)
				{
					if( g_arGuildFortress[i]->m_MsgTimer[j].iMsgTime == nTime )
					{
						if(g_arGuildFortress[i]->m_MsgTimer[j].iUsed == 1) break;

						if(g_arGuildFortress[i]->m_sFortressID == 1000)
						{
							strMsg.Format( IDS_USER_END_LUINET_SOON, g_arGuildFortress[i]->m_MsgTimer[j].iMsgTime);
						}
						else if(g_arGuildFortress[i]->m_sFortressID == 1001)
						{
							strMsg.Format( IDS_USER_END_SANAD_SOON, g_arGuildFortress[i]->m_MsgTimer[j].iMsgTime);
						}
						else if(g_arGuildFortress[i]->m_sFortressID == 1002)
						{
							strMsg.Format( IDS_USER_END_ZAMELLYA_SOON, g_arGuildFortress[i]->m_MsgTimer[j].iMsgTime);
						}
						Announce((LPTSTR)(LPCTSTR)strMsg, SYSTEM_ANNOUNCE);
						g_arGuildFortress[i]->m_MsgTimer[j].iUsed = 1;
						break;
					}
				}
			}
		}
	}
}

void COM::ReUpdateFortress2DB(CGuildFortress *pFort)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode = 0;
	TCHAR			szSQL[8000];
	TCHAR			strWarTime[30];

	CString strTime = _T("");

	if(pFort == NULL) return;

	::ZeroMemory(szSQL, sizeof(szSQL));

	::ZeroMemory(strWarTime, sizeof(strWarTime));

	SYSTEMTIME guildTime;
	GetLocalTime(&guildTime);
	CTime curr(guildTime);

	curr += CTimeSpan( 7, 0, 0, 0 ); 

	strTime.Format("%d-%d-%d 21:00:00", curr.GetYear(), curr.GetMonth(), curr.GetDay());
	::CopyMemory(strWarTime, strTime.GetBuffer(strTime.GetLength()), strTime.GetLength());
	strTime.ReleaseBuffer();
		
	::ZeroMemory(szSQL, sizeof(szSQL));

	_sntprintf(szSQL, sizeof(szSQL), TEXT("{call REUPDATE_GUILD_FORTRESS(%d,%d,\'%s\',\'%s\')}"), 
	pFort->m_sFortressID, pFort->m_iGuildSid, pFort->m_strGuildName, strWarTime);

	int db_index = 0;
	CDatabase* pDB = g_DBNew[AUTOMATA_THREAD].GetDB( db_index );
	if( !pDB ) return ;

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, pDB->m_hdbc, &hstmt );
	if( retcode != SQL_SUCCESS )
	{
		TRACE("Fail To Update Guild_Store Data Only!!\n");

		//g_DBNew[m_iModSid].ReleaseDB(db_index);
		return ;
	}

	if (retcode == SQL_SUCCESS)
	{
		retcode = SQLExecDirect(hstmt, (unsigned char *)szSQL, SQL_NTS);
		if (retcode ==SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
		{
		}
		else if (retcode==SQL_ERROR)
		{
			DisplayErrorMsg( hstmt );
			SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);

			g_DB[AUTOMATA_THREAD].ReleaseDB(db_index);
			return ;
		}
	}	
	else
	{
		DisplayErrorMsg( hstmt );
		SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);

		g_DBNew[AUTOMATA_THREAD].ReleaseDB(db_index);
		return ;
	}

	if (hstmt!=NULL) SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
	g_DBNew[AUTOMATA_THREAD].ReleaseDB(db_index);
}

void COM::SendFortressWarBegin(CGuildFortress *pFort)
{
	UpdateFortress2DB(pFort);

	int mapindex = -1;
	BOOL bSend = FALSE;
	int i, j, k, type;
	int nLen = 0;
	USER *pUser = NULL;

	CBufferEx TempBuf;
	CDWordArray arGuildList;
	arGuildList.RemoveAll();

	if(pFort->m_iGuildSid <= 0) return;				// 辨靛傈阑困秦 曼咯吝牢 傈眉 府胶飘甫 父电促.
	arGuildList.Add(pFort->m_iGuildSid);				// 郴辨靛 刚历...

	for(j =0; j < GUILDFORTRESS_ATTACK_MAX_NUM; j++)			// 惑措祈 辨靛...
	{
		if(pFort->m_arAttackGuild[j].lUsed == 1)
		{
			arGuildList.Add(pFort->m_arAttackGuild[j].lGuild);
		}
	}

	CString strMsg;

	short nCount = arGuildList.GetSize();

	if(nCount <= 1) 
	{
		strMsg = _T("");
		if(pFort->m_sFortressID == 1000) strMsg.Format( IDS_USER_END_LUINET_NO_APPLY );
		else if(pFort->m_sFortressID == 1001) strMsg.Format( IDS_USER_END_SANAD_NO_APPLY );
		else if(pFort->m_sFortressID == 1002) strMsg.Format( IDS_USER_END_ZAMELLYA_NO_APPLY );
		Announce((LPTSTR)(LPCTSTR)strMsg, SYSTEM_NORMAL);
		pFort->m_dwStartTick = 0;
		return;
	}

	TempBuf.Add(GUILD_WAR);
	TempBuf.Add((BYTE)0x01);							// 辨靛傈 矫累...
	TempBuf.Add((BYTE)GUILD_FOTRESS_WARRING);			// 惑痢傈...

	TempBuf.Add((short)pFort->m_sFortressID);			// 秦寸 瘤开 牢郸胶

	strMsg = _T("");
	if(pFort->m_sFortressID == 1000) strMsg.Format( IDS_USER_START_LUINET );
	else if(pFort->m_sFortressID == 1001) strMsg.Format( IDS_USER_START_SANAD );
	else if(pFort->m_sFortressID == 1002) strMsg.Format( IDS_USER_START_ZAMELLYA );

	for(i = 0; i < MAX_USER; i++)
	{
		type = 0;
		nLen = 0;
		mapindex = -1;

		pUser = GetUserUid(i);

		if(pUser == NULL || pUser->m_state != STATE_GAMESTARTED) continue;		

		pUser->SendSystemMsg((LPTSTR)(LPCTSTR)strMsg, SYSTEM_ANNOUNCE, TO_ME);

		type = ((g_zone[pUser->m_ZoneIndex]->m_pMap[pUser->m_curx][pUser->m_cury].m_dwType & 0xFF00 ) >> 8);

		//if(type >= 0 && type < 17)
		mapindex = pUser->GetGuildMapIndex(type);
		if(mapindex >= 0) 
		{															 //辨靛傈捞 老绢唱绰 惑痢瘤开捞搁
			if(g_arMapTable[mapindex]->m_sStoreID == pFort->m_sFortressID)// && g_arMapTable[type]->m_sStoreZone)		
			{																		 // 家蜡 辨靛啊 绝栏搁 葛滴 付阑肺 焊辰促.				
				if(pFort->m_iGuildSid != pUser->m_dwGuild && pUser->m_tIsOP != TRUE ) pUser->TownPotal();
			}
		}
		
		CBufferEx DataBuf;
		DataBuf.AddData(TempBuf, TempBuf.GetLength());

		nLen = strlen(pUser->m_strGuildName);
		if(pUser->m_dwGuild <= 0 || nLen <= 0) 
		{			
			DataBuf.Add((BYTE)0x00);					// 老馆蜡历			
			pUser->Send(DataBuf, DataBuf.GetLength());
			continue;
		}

		if(pFort->m_iGuildSid == pUser->m_dwGuild) 
		{
			pUser->BeginFortressWar();					// 辨靛 傈阑 矫累茄促.
			
			DataBuf.Add((BYTE)0x01);					// 秦寸 辨靛 蜡历
			DataBuf.Add(nCount);						// 醚 辨靛荐

			for(j = 0; j < nCount; j++)
			{
				DataBuf.Add(arGuildList[j]);
			}

			pUser->Send(DataBuf, DataBuf.GetLength());
		}
		else
		{
			for(j =0; j < GUILDFORTRESS_ATTACK_MAX_NUM; j++)
			{
				if(pFort->m_arAttackGuild[j].lUsed == 0) continue;

//				if(strcmp(pFort->m_arAttackGuild[j].strGuildName, pUser->m_strGuildName) == 0)
				if(pFort->m_arAttackGuild[j].lGuild == pUser->m_dwGuild)
				{
					pUser->BeginFortressWar();			// 辨靛 傈阑 矫累茄促.
					
					DataBuf.Add((BYTE)0x01);			// 秦寸 辨靛 蜡历
					DataBuf.Add(nCount);				// 醚 辨靛荐
					for(k = 0; k < nCount; k++)
					{
						DataBuf.Add(arGuildList[k]);
					}
					bSend = TRUE;
					pUser->Send(DataBuf, DataBuf.GetLength());
					break;
				}
			}

			if(!bSend)
			{				
				DataBuf.Add((BYTE)0x00);					// 老馆蜡历
				pUser->Send(DataBuf, DataBuf.GetLength());
			}
		}
	}

	pFort->SetNpcToFortressWarBegin();
}

/////////////////////////////////////////////////////////////////////////////////////////
//	辨靛傈捞 弥辆利栏肺 场唱绊 缔付公府甫 茄促.
//
void COM::SendFortressWarEnd(CGuildFortress *pFort)
{
	int mapindex;
	int i, type;
	USER *pUser = NULL;

	pFort->SetNpcToFortressWarEnd(this);

	CString strMsg = _T("");
	strMsg.Format( IDS_USER_END_FORTRESS, pFort->m_strGuildName);

	CBufferEx TempBuf;

	TempBuf.Add(GUILD_WAR);
	TempBuf.Add((BYTE)0x02);							// 辨靛傈 辆丰...
	TempBuf.Add((BYTE)GUILD_FOTRESS_WARRING);
	TempBuf.Add((short)pFort->m_sFortressID);

//	Send(TempBuf, TempBuf.GetLength());

	for(i = 0; i < MAX_USER; i++)
	{
		mapindex = -1;

		pUser = GetUserUid(i);

		if(pUser == NULL || pUser->m_state != STATE_GAMESTARTED) continue;

		type = pUser->CheckInvalidMapType();
		mapindex = pUser->GetGuildMapIndex(type);
		if(mapindex >= 0)
		{												//辨靛傈捞 老绢唱绰 惑痢瘤开捞搁
			if(g_arMapTable[mapindex]->m_sStoreID == pFort->m_sFortressID) //&& g_arMapTable[type]->m_sStoreZone)		
			{											// 规绢辨靛盔捞 酒聪搁 葛滴 付阑肺																				 
				if(pFort->m_iGuildSid != pUser->m_dwGuild && pUser->m_tIsOP != TRUE) pUser->TownPotal();
			}
		}

		pUser->m_tFortressWar = GUILD_WAR_AFFTER;

		pUser->Send(TempBuf, TempBuf.GetLength());

		if(pFort->m_iZone == pUser->m_curz)
		{
			if(pFort->m_iGuildSid != pUser->m_dwGuild && pUser->m_tIsOP != TRUE ) pUser->TownPotal();
		}

		pUser->SendSystemMsg((LPTSTR)(LPCTSTR)strMsg, SYSTEM_ANNOUNCE, TO_ME);					
	}

	pFort->UpdateInitFortress();

	ReUpdateFortress2DB(pFort);	
}

void COM::RemoveUserInGuildHouse()
{
	int i, j;
	USER *pUser = NULL;

	for(i = 0; i < MAX_USER; i++)
	{
		pUser = GetUserUid(i);

		if(pUser == NULL || pUser->m_state != STATE_GAMESTARTED) continue;
		if(pUser->m_dwGuild <= 0) continue;
	
		for(j = 0; j < g_arGuildHouse.GetSize(); j++)
		{
			if(g_arGuildHouse[j]->iZone == pUser->m_curz)
			{
				if(g_arGuildHouse[j]->iGuild != pUser->m_dwGuild && pUser->m_tIsOP != TRUE ) 
				{
					pUser->TownPotal();
					break;
				}
			}
		}
	}
}

void COM::UpdateFortress2DB(CGuildFortress *pFort)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode = 0;
	BOOL			bQuerySuccess = TRUE;
	TCHAR			szSQL[8000];
	int				i;	

	if(pFort == NULL) return;

	TCHAR			strAttackList[_GUILDLIST_DB], strRepairList[_GUILDREPAIRLIST_DB];

	::ZeroMemory(szSQL, sizeof(szSQL));
	::ZeroMemory(strRepairList, sizeof(strRepairList));
	::ZeroMemory(strAttackList, sizeof(strAttackList));

	pFort->GuildAttListToStr(strAttackList);
	pFort->FortressRepairListToStr(strRepairList);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -