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