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

📄 com.cpp

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 CPP
📖 第 1 页 / 共 5 页
字号:

	SDWORD sAttLen		= sizeof(strAttackList);
	SDWORD sRepairLen	= sizeof(strRepairList);

	_sntprintf(szSQL, sizeof(szSQL), TEXT("{call UPDATE_GUILD_FORTRESS(%d,%d,\'%s\',%d,%d,%d,?,?)}"), 
	pFort->m_sFortressID, pFort->m_iGuildSid, pFort->m_strGuildName, pFort->m_tTaxRate, pFort->m_iGuildDN, pFort->m_tWarType);

	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)
	{
		i = 1;
		SQLBindParameter( hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, sizeof(strAttackList),0, (TCHAR*)strAttackList,	0, &sAttLen );
		SQLBindParameter( hstmt, i++, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_VARBINARY, sizeof(strRepairList),0, (TCHAR*)strRepairList,	0, &sRepairLen );

		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_DBNew[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);
	
	if( !bQuerySuccess ) return ;

}

void COM::UpdateFortressMem2DB(CGuildFortress *pFort)
{
/*	int				i;
	TCHAR			strAttackList[_GUILDLIST_DB], strRepairList[_GUILDREPAIRLIST_DB];

	if(pFort == NULL) return;

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

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

	SDWORD sAttLen		= sizeof(strAttackList);
	SDWORD sRepairLen	= sizeof(strRepairList);
	
	CSharedMemory* pShared = NULL;
	CMemFortress* pMDFort = NULL;

	for(i = 0; i < g_arFortressSharedMemory.GetSize(); i++)
	{
		pShared = g_arFortressSharedMemory[i];
	
		if(pShared == NULL) continue;
		if(pShared->m_hMapping == NULL) continue;
		
		pMDFort = (CMemFortress*) pShared->m_lpData;
		
		if(pMDFort == NULL) continue;
		if(pMDFort->m_sFortressID <= 0) continue;

		if(pMDFort->m_sFortressID == pFort->m_sFortressID)
		{
			pMDFort->m_iGuildSid = pFort->m_iGuildSid;
			pMDFort->m_sTaxRate = 0;
			pMDFort->m_dwStoreDN = 0;
			pMDFort->m_tWarType = GUILD_WAR_PREPARE;
			pFort->FortressRepairListToStr(pMDFort->m_RepairList);
			pFort->GuildAttListToStr(pMDFort->m_AttackList);
			return;
		}
	}
*/
}

void COM::LoadFortressCityDegree(CGuildFortress *pFort)
{
/*	if(!pFort) return;
	if(!pFort->m_bHaveGuild) return;
	if(pFort->m_iGuildSid <= 0) return;

	int				i;
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];

	SQLINTEGER	iRet = -1;
	SQLINTEGER	iRetInd = SQL_NTS;
	
	SQLINTEGER iCityDegree;

	::ZeroMemory(szSQL, sizeof(szSQL));
	
	iCityDegree = 0;

	_sntprintf(szSQL, sizeof(szSQL), TEXT("{call LOAD_GUILD_FORTRESS_CITYDEGREE(%d, ?)}"), pFort->m_iGuildSid);

//	SQLINTEGER	sInd;

	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 Load Guild_Store Attack List Data !!\n");

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

	i = 1;
	SQLBindParameter( hstmt, i++ ,SQL_PARAM_OUTPUT,SQL_C_SLONG, SQL_INTEGER,0,0, &iRet,0, &iRetInd);
	retcode = SQLExecDirect( hstmt, (unsigned char*)szSQL, SQL_NTS);

	if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
	{
		retcode = SQLFetch( hstmt );
		if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
		{
//			SQLGetData( hstmt, i++, SQL_C_SLONG,  &iCityDegree,sizeof(iCityDegree),&sInd );
//			SQLGetData( hstmt, i++, SQL_C_SSHORT, &sCityDegree,	 sizeof(sCityDegree),	&sInd );
//			SQLGetData( hstmt, i++, SQL_C_ULONG, &sCityDegree,	 sizeof(sCityDegree),	&sInd );
		}
	}
	else
	{
		DisplayErrorMsg(hstmt);
		retcode = SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
//		BREAKPOINT();

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

	retcode = SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
	g_DBNew[AUTOMATA_THREAD].ReleaseDB(db_index);

//	pFort->m_iCityDegree = iRet;
*/
}


void COM::SetFortressWarTime(CGuildFortress *pFort)
{
	CString			strTime;
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode = 0;
	BOOL			bQuerySuccess = TRUE;
	TCHAR			szSQL[8000];		
	TCHAR			strWarTime[30];

	SYSTEMTIME guildTime;
	CTimeSpan DiffTime;

	if(pFort->m_iGuildSid <= 0) return;

	int iYear = 0;
	int iMon = 0;
	int iDay = 0;
	long temp = -1;

	strTime = _T("");
	::ZeroMemory(szSQL, sizeof(szSQL));
	::ZeroMemory(strWarTime, sizeof(strWarTime));

	GetLocalTime(&guildTime);

	CTime curr(guildTime);
	CTime last(pFort->m_wPlanWarTime);
	DiffTime = last - curr;	
	
	temp = DiffTime.GetDays();
	
	if(temp < 0)
	{
		curr += CTimeSpan( 7, 0, 0, 0 ); 

		iYear = curr.GetYear();
		iMon = curr.GetMonth();
		iDay = curr.GetDay();
	}
	else 
	{
		if(pFort->m_tWarType == GUILD_WAR_DECISION) return;

		iYear = last.GetYear();
		iMon = last.GetMonth();
		iDay = last.GetDay();	
	}
	
	pFort->m_wPlanWarTime.wYear = iYear;
	pFort->m_wPlanWarTime.wMonth = iMon;
	pFort->m_wPlanWarTime.wDay = iDay;

	strTime.Format("%d-%d-%d 21:00:00", iYear, iMon, iDay);
	::CopyMemory(strWarTime, strTime.GetBuffer(strTime.GetLength()), strTime.GetLength());
	strTime.ReleaseBuffer();
	
	SDWORD sLen	= sizeof(strWarTime);

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

	_sntprintf(szSQL, sizeof(szSQL), TEXT("{call UPDATE_GUILD_FORTRESS_WARTIME(%d,%d,\'%s\')}"), pFort->m_sFortressID, pFort->m_iGuildSid, 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 Fortress War Data Only!!\n");
		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_DBNew[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);
	
	pFort->m_wPlanWarTime.wYear = iYear;
	pFort->m_wPlanWarTime.wMonth = iMon;
	pFort->m_wPlanWarTime.wDay = iDay;
	pFort->m_wPlanWarTime.wHour = 21;

	pFort->m_tWarType = GUILD_WAR_DECISION;// 12矫埃 傈俊 搬沥捞 救登绢 乐促搁 官肺 被洒扁 累诀俊 甸绢埃促.

	UpdateMemFortressWarType(pFort);
}

void COM::UpdateMemFortressWarType(CGuildFortress *pFort)
{
	if(pFort == NULL) return;

	int nSize = g_arFortressSharedMemory.GetSize();
	CSharedMemory* pShared = NULL;
	CMemFortress* pData = NULL;

	for(int i = 0; i < nSize; i++)
	{
		pShared = g_arFortressSharedMemory[i];
		
		if(pShared == NULL) return;
		if(pShared->m_hMapping == NULL) return;
		
		pData = (CMemFortress*) pShared->m_lpData;
		
		if(pData == NULL) return;
		
		if(pData->m_iGuildSid == pFort->m_iGuildSid)
		{
			pData->m_tWarType = pFort->m_tWarType;
			break;
		}
	}
}


/////////////////////////////////////////////////////////////////////////////////////////
//	辨靛啊 家蜡窍绊 乐栏搁 刮缴荐摹甫 犬牢茄促.
//
void COM::CheckViolenceInFortress()
{
	SYSTEMTIME guildTime;
	GetLocalTime(&guildTime);
	DWORD dwCurrTick = GetTickCount();					// 力茄 矫埃郴狼 辨靛傈阑 眉农...

	COleDateTime CurrTime = COleDateTime(guildTime);
	SYSTEMTIME st;

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

	for(i = 0; i < g_arGuildFortress.GetSize(); i++)
	{
		int time = 0;
		CTimeSpan DiffTime;

		if(!g_arGuildFortress[i]) continue;

		if(g_arGuildFortress[i]->m_lViolenceUsed == 0) 
		{
			st = g_arGuildFortress[i]->m_wMopPartyTime;
			COleDateTime MopTime(st.wYear, st.wMonth, st.wDay, st.wHour, 0, 0);

			if(MopTime.GetYear() >= 2030) 
			{
				if(g_arGuildFortress[i]->GetTotalCityValue() > 60)	// 弥厩狼 刮缴俊 酒流 DB俊 馆康捞 救登搁 静绊 墨款飘 促款 矫累...
				{
					GetLocalTime(&g_arGuildFortress[i]->m_wMopPartyTime);
					SetFortressViolenceTime(g_arGuildFortress[i], g_arGuildFortress[i]->m_iGuildSid, FORTRESS_VIOLENCE_WARRING);
				}
				continue;
			}

			if(CurrTime.m_status == COleDateTime::valid && MopTime.m_status == COleDateTime::valid)
			{
				CTime curr(CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), 0, 0);
				CTime last(MopTime.GetYear(), MopTime.GetMonth(), MopTime.GetDay(), MopTime.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矫埃付促
				{
					g_arGuildFortress[i]->m_wMopPartyTime.wYear = 2030;
					SetFortressViolenceTime(g_arGuildFortress[i], g_arGuildFortress[i]->m_iGuildSid, FORTRESS_VIOLENCE_AFFTER);

					if(g_arGuildFortress[i]->m_sFortressID == 1000)
					{
						strMsg.Format( IDS_USER_RIOT_LUINET );
					}
					else if(g_arGuildFortress[i]->m_sFortressID == 1001)
					{
						strMsg.Format( IDS_USER_RIOT_SANAD );
					}
					else if(g_arGuildFortress[i]->m_sFortressID == 1002)
					{
						strMsg.Format( IDS_USER_RIOT_ZAMELLYA );
					}
					Announce((LPTSTR)(LPCTSTR)strMsg, SYSTEM_ANNOUNCE);

					g_arGuildFortress[i]->m_dwViolenceTick = dwCurrTick;
					g_arGuildFortress[i]->SetNpcToFortressViolenceBegin();
					InterlockedExchange(&g_arGuildFortress[i]->m_lViolenceUsed, 1);
				}
			}
		}
		else if(g_arGuildFortress[i]->m_lViolenceUsed == 1) 
		{
			if(dwCurrTick - g_arGuildFortress[i]->m_dwViolenceTick > 60000 * 10)	// 10盒 抛胶飘
			{				// 场车促.
				InterlockedExchange(&g_arGuildFortress[i]->m_lViolenceUsed, 0);
				g_arGuildFortress[i]->m_dwStartTick = 0;				
				SetNpcToViolenceFortressWarEnd(g_arGuildFortress[i]);
//				SendFortressWarEnd(g_arGuildFortress[i]);
			}
		}
	}
}

void COM::SetFortressViolenceTime(CGuildFortress *pFort, int iGuild, int iType)
{
	CString			strTime;
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode = 0;
	BOOL			bQuerySuccess = TRUE;
	TCHAR			szSQL[8000];		

	CTimeSpan DiffTime;

	if(pFort->m_iGuildSid <= 0) return;

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

	_sntprintf(szSQL, sizeof(szSQL), TEXT("{call UPDATE_GUILD_FORTRESS_VIOLENCETIME(%d,%d,%d)}"), pFort->m_sFortressID, iGuild, iType);

	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 Fortress War Data Only!!\n");
		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_DBNew[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::SetNpcToViolenceFortressWarEnd(CGuildFortress *pFort)
{	
	BOOL bChange = FALSE;
	CString strMsg = _T("");

	bChange = pFort->SetNpcToFortressViolenceEnd(this);

	if(bChange)
	{
		SetFortressViolenceTime(pFort, 900000, FORTRESS_VIOLENCE_AFFTER);

		pFort->SetInitFortressViolence();
		pFort->InitMemFortress(GUILD_WAR_DECISION);

		if(pFort->m_sFortressID == 1000)
		{
			strMsg.Format( IDS_USER_RIOT_LUINET_RETURN );
		}
		else if(pFort->m_sFortressID == 1001)
		{
			strMsg.Format( IDS_USER_RIOT_SANAD_RETURN );
		}
		else if(pFort->m_sFortressID == 1002)
		{
			strMsg.Format( IDS_USER_RIOT_ZAMELLYA_RETURN );
		}
		Announce((LPTSTR)(LPCTSTR)strMsg, SYSTEM_ANNOUNCE);

		pFort->GetOutof(this);
	}
}

⌨️ 快捷键说明

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