📄 com.cpp
字号:
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 + -