?? cfightzone.cpp
字號(hào):
//
// Socket Check Function欄肺 薦瀝竊 (礙輛齲)
//
/*
if( !lpSocketFD ) continue;
if( lpSocketFD->dwMagicNum != MAGIC_NUM ) continue;
if( lpSocketFD->bClose ) continue;
if( lpSocketFD->socket == INVALID_SOCKET ) continue;
if( !lpSocketFD->pPlayer) continue;
*/
if( !IsSocketValidity( lpSocketFD ) ) continue;
if(bIsStarGame)
{
if( lpSocketFD->pPlayer->m_nTeam != DEF_OBSERVER )
{
lpSocketFD->pPlayer->m_bIsFightMode = true ;
}
}
else
{
// 版扁啊 輛豐 登綽 版快 檬扁拳
lpSocketFD->pPlayer->MatchClear();
}
lpSendIOContext = NULL;
lpSendIOContext = g_pServer->CreateIOContext(WRITE);
if( lpSendIOContext )
{
memcpy( lpSendIOContext->buf , pZemiPacket, pZemiPacket->dwSize );
lpSendIOContext->dwTotalBytes = pZemiPacket->dwSize;
g_pServer->Send( lpSocketFD , lpSendIOContext );
}
}
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightZone::GameEnd()
{
if (m_lpMatch != NULL)
{
g_lpDBSock->WorldSend_FightzoneReserveCancel(NULL, lpZoneInfor.strFightZoneName ,wSeq, m_lpMatch->m_dwMatchSEQ ) ;
#ifdef DEF_FIGHTZONEITEM
if(Prize != PVP_PRIZE_GAMBLIE )
#endif
{
g_lpFightzoneManager->lpMapMatch->Delete(m_lpMatch->m_dwMatchSEQ) ;
g_lpFightzoneManager->lpMatchPool->Free(m_lpMatch) ;
m_lpMatch = NULL ;
}
}
else
{
g_lpDBSock->WorldSend_FightzoneReserveCancel(NULL, lpZoneInfor.strFightZoneName ,wSeq, 0 ) ;
}
}
////////////////////////////////////////////////////////////////////////////////////////
// PVP 矯累
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightZone::GameStart()
{
if (m_lpMatch == NULL) return ;
// 惑措規(guī)狼 付膠磐啊 絕欄擱 矯累且 薦絕促.
if (sMasterCount != sTeamCount || nPlayer == 0 )
{
bIsFightEnd = true ;
if (Team == PVP_TEAM_PERSON)
Send_NoticeMsgAndChangeMode(MSG_FIGHTZONENOENEMY,false) ;
else
Send_NoticeMsgAndChangeMode(MSG_FIGHTZONENOMASTER,false) ;
return ;
}
// 評(píng) 牢盔薦啊 嘎瘤 臼闌錠 霸烙 輛豐
// if ( MemberCount[0] != MemberCount[1])
// {
// Send_NoticeMsg(MSG_FIGHTZONENOSAMEMEMBER) ;
// bIsFightEnd = true ;
//
// return ;
// }
for(int i = 0 ; i < DEF_MAXTEAM ; ++i)
{
if(MemberCount[i] > 0 )
bTeamJoin[i] = true;
}
// 版扁 矯累
bIsFightStart = true ;
// 彌措 牢盔薦甫 歷厘茄促.
memcpy(sMaxMember, MemberCount, sizeof(short)*DEF_MAXTEAM) ;
_LPZEMIPACKET lpSendPacket = g_pServerMem->ZemiPacket_Pop();
lpSendPacket->dwCommand = ZP_PVPSTART ;
lpSendPacket->dwSize = 0 ;
SendAll_PacketAndChangeMode( lpSendPacket , true );
g_pServerMem->ZemiPacket_Push( lpSendPacket );
}
////////////////////////////////////////////////////////////////////////////////////////
// PVP狼 焊齲 MODE矯埃闌 厚背竊
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightZone::CheckProtectTime()
{
_LPSOCKET_FD lpSocketFD ;
for(POSITION pos = m_lpListPlayer->GetHeadPosition(); pos != NULL;)
{
lpSocketFD = (_LPSOCKET_FD)m_lpListPlayer->GetNext(pos);
if( !lpSocketFD ) continue;
if( IsBadReadPtr(lpSocketFD, sizeof(_SOCKET_FD) ) )
{
MapLog("(X) Fightzone Point Error !!") ;
continue ;
}
//
// Socket Function欄肺 措眉 矯糯 [礙輛齲]
//
/*
if( lpSocketFD->dwMagicNum != MAGIC_NUM ) continue;
if( lpSocketFD->bClose ) continue;
if( lpSocketFD->socket == INVALID_SOCKET ) continue;
if( !lpSocketFD->pPlayer) continue;
*/
if( !IsSocketValidity( lpSocketFD ) ) continue;
if( lpSocketFD->pPlayer->m_sProtectTime > 0 )
{
if(--lpSocketFD->pPlayer->m_sProtectTime <= 0)
{
lpSocketFD->pPlayer->m_bIsFightMode = true ;
lpSocketFD->pPlayer->m_sProtectTime = 0 ;
}
}
}
}
CFightzoneManager::~CFightzoneManager()
{
lpMapFightZone->Clear() ;
SAFE_DELETE <SafeMap> (&lpMapFightZone ) ;
SAFE_DELETE <SafeMap> (&lpMapMatch ) ;
SAFE_DELETE <CMemPool <CFightZone> > (&lpFightzonePool ) ;
SAFE_DELETE <CMemPool <CMatch> > (&lpMatchPool ) ;
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
CFightzoneManager::CFightzoneManager()
{
lpMapFightZone = new SafeMap ;
lpMapMatch = new SafeMap ;
lpFightzonePool = new CMemPool<CFightZone>(MAX_FIGHTZONE);
lpMatchPool = new CMemPool< CMatch >(MAX_FIGHTZONE * MAX_MATCH);
wFightZoneSeq = 0 ;
m_dwTimeTick = 0 ;
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
CFightzoneManager::CFightzoneManager(bool bIsMapServer)
{
// 甘輯滾綽 葷捧厘 瀝焊啊 鞘夸 絕促.
if(!bIsMapServer)
{
lpMapFightZone = new SafeMap ;
lpFightzonePool = new CMemPool<CFightZone>(MAX_FIGHTZONE);
}
else
{
lpMapFightZone = NULL ;
lpFightzonePool = NULL ;
}
lpMapMatch = new SafeMap ;
lpMatchPool = new CMemPool< CMatch >(MAX_FIGHTZONE * MAX_MATCH);
wFightZoneSeq = 0 ;
m_dwTimeTick = 0 ;
m_bIsMapServer = bIsMapServer ;
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightzoneManager::MatchReserve(_LPZW_FIGHTZONERESERVE lpFightZoneReserve)
{
_LPCFIGHTZONE lpFightZone = Find_FightZone(lpFightZoneReserve->wSEQ) ;
if(lpFightZone == NULL) return ;
lpFightZone->Clear() ;
_LPCMATCH lpMatch = lpMatchPool->Alloc() ;
lpMatch->Clear() ;
lpMatch->m_lpFightZone = lpFightZone ;
lpFightZone->m_lpMatch = lpMatch ;
lpFightZone->Prize = lpFightZoneReserve->lpInfor.Prize ;
lpFightZone->Team = lpFightZoneReserve->lpInfor.Team ;
lpFightZone->UsePotion = lpFightZoneReserve->lpInfor.UsePotion ;
lpFightZone->wTime = lpFightZoneReserve->lpInfor.wTime ;
lpFightZone->Type = lpFightZoneReserve->lpInfor.Type ;
lpFightZone->dwReserveTime = m_dwTimeTick ;
lpMatch->Rule = lpFightZoneReserve->lpInfor.Rule ;
lpMatch->MasterHandle[0] = lpFightZoneReserve->lpInfor.dwFromPlayerHande ;
lpMatch->MasterHandle[1] = lpFightZoneReserve->lpInfor.dwToPlayerHande ;
lpMatch->m_dwMatchSEQ = lpFightZoneReserve->dwMatchSEQ ;
// 15檬 饒 矯累
lpFightZone->dwTime = 15 + m_dwTimeTick ;
if(lpFightZone->bIsHidden )
lpFightZone->dwTime = 20 + m_dwTimeTick ;
lpFightZone->bIsHidden = lpFightZoneReserve->bIsHiden ;
// 評(píng)傈撈擱 15檬 眠啊
if (lpFightZone->Team == PVP_TEAM_GUILD)
lpFightZone->dwTime += 15 ;
memcpy(lpFightZone->cTeamName[0], lpFightZoneReserve->lpInfor.strFromPlayerID,20) ;
memcpy(lpFightZone->cTeamName[1], lpFightZoneReserve->lpInfor.strToPlayerID ,20) ;
lpFightZone->sTeamCount = lpFightZoneReserve->nTeamCount ;
lpMapMatch->Insert(lpFightZoneReserve->dwMatchSEQ , lpMatch ) ;
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void CFightzoneManager::Register(_FIGHTZONE * lpZoneInfor,DWORD dwMapSEQ ,int nlayer ,int nPKMode)
{
_LPCFIGHTZONE lpFightzone = lpFightzonePool->Alloc() ;
lpFightzone->m_lpListPlayer = new CXPtrList ;
lpFightzone->Clear() ;
memcpy(&lpFightzone->lpZoneInfor, lpZoneInfor, sizeof(_FIGHTZONE) ) ;
lpFightzone->nLayer = nlayer ;
lpFightzone->dwMapSEQ = dwMapSEQ ;
++wFightZoneSeq ;
lpFightzone->nPlayer = 0 ;
lpFightzone->wSeq = wFightZoneSeq ;
if(nPKMode)
lpFightzone->lpZoneInfor.bIsHiden = false ;
else
lpFightzone->lpZoneInfor.bIsHiden = true ;
lpMapFightZone->Insert(wFightZoneSeq, lpFightzone ) ;
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
WORD CFightzoneManager::wGetList(char * lpData)
{
WORD wFightZoneCount = 0 ;
_LPCFIGHTZONE lpFightZone = NULL;
MAP_VOIDPTR::iterator iEnd = lpMapFightZone->End() ;
for (MAP_VOIDPTR::iterator it = lpMapFightZone->Begin(); it != iEnd; ++it)
{
lpFightZone = static_cast <_LPCFIGHTZONE> (it->second) ;
if(lpFightZone == NULL) continue ;
_LPFIGHTZONEINFOR lpFightzoneInfor = (_LPFIGHTZONEINFOR) lpData ;
memcpy(lpFightzoneInfor->strMapName, lpFightZone->lpZoneInfor.strFightZoneName , 20) ;
memcpy(lpFightzoneInfor->Point, lpFightZone->lpZoneInfor.Point,sizeof(_POINT)*DEF_MAXTEAM ) ;
lpFightzoneInfor->dwMapSEQ = lpFightZone->dwMapSEQ ;
lpFightzoneInfor->wSEQ = it->first ;
lpFightzoneInfor->bIsHiden = lpFightZone->lpZoneInfor.bIsHiden ;
lpData += sizeof(_FIGHTZONEINFOR) ;
++wFightZoneCount ;
}
return wFightZoneCount ;
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
bool CFightzoneManager::bLoginZone(_LPSOCKET_FD lpSocketFD,DWORD dwMatchSeq, int nTeam, int x, int y )
{
//
// Socket Function欄肺 烹老 矯糯
//
/*
if( !lpSocketFD ) return false ;
if( lpSocketFD->dwMagicNum != MAGIC_NUM ) return false ;
if( lpSocketFD->bClose ) return false ;
if( lpSocketFD->socket == INVALID_SOCKET ) return false ;
*/
if( !IsSocketValidity( lpSocketFD ) ) return false ;
_LPCMATCH lpMatch = NULL ;
if( NULL == (lpMatch = Find_Match(dwMatchSeq)))
{
return false ;
}
if( NULL == lpMatch->m_lpFightZone) return false ;
// 版扁啊 矯累登菌促.
// 可歷滾綽 版扁 矯累苞 包拌絕撈 甸絹哎薦 樂(lè)促.
if( nTeam != DEF_OBSERVER && lpMatch->m_lpFightZone->bIsStartMatch) return false ;
if ( lpMatch->bCheckLocation(lpSocketFD->pPlayer->m_nMapLayer, x, y) )
{
lpSocketFD->pPlayer->m_nUsePotion = lpMatch->m_lpFightZone->UsePotion ;
lpSocketFD->pPlayer->m_nMatchTeamType = lpMatch->m_lpFightZone->Team ;
lpSocketFD->pPlayer->m_bIsFightZone = true ;
lpSocketFD->pPlayer->m_bIsFightMode = false ;
lpMatch->JoinTeam(lpSocketFD,nTeam ) ;
ErrorMsg("(FZ) PlayerLoin (%s) Match(%d) Killed(%d) Member(%d) TeamCount(%d) Team(%d)",
lpSocketFD->pPlayer->m_strPlayerID, lpSocketFD->pPlayer->m_dwMatchSEQ,
lpMatch->m_lpFightZone->KilledCount[lpSocketFD->pPlayer->m_nTeam] , lpMatch->m_lpFightZone->MemberCount[lpSocketFD->pPlayer->m_nTeam]
, lpMatch->m_lpFightZone->sTeamCount ,lpSocketFD->pPlayer->m_nTeam);
return true ;
}
return false ;
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
bool CFightzoneManager::bIsTeleportZone(_LPSOCKET_FD lpSocketFD,DWORD nMatchSeq)
{
/*
if( !lpSocketFD ) return false ;
if( lpSocketFD->dwMagicNum != MAGIC_NUM ) return false ;
if( lpSocketFD->bClose ) return false ;
if( lpSocketFD->socket == INVALID_SOCKET ) return false ;
*/
if( !IsSocketValidity( lpSocketFD ) ) return false ;
_LPCMATCH lpMatch = NULL ;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -