?? sector.h
字號:
//=============================================================================================================================
/// Sector class
/**
@author Kim Min Wook < taiyo@webzen.com >
@since 2004. 12. 14
@remark
- 鞘靛甫 備己竅綽 扁夯 竄困 冀磐
@note
-
@history
- 2006/1/11 : 敲飯撈絹啊 冀磐俊 甸絹 吭闌 錠 辨靛 瀝焊 焊郴林檔廢 眠啊,
扁糧狼 m_ResultMsg甫 葷儈竅帶 何盒闌 昏力, 葷儈竅瘤 臼酒檔 凳.
SetFirst(), GetNext() -> iterator肺 官廁
*/
//=============================================================================================================================
#ifndef __SECTOR_H__
#define __SECTOR_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <ResultCode.h>
#include <CriticalSection.h>
#include <map>
#include <PacketStruct.h>
#include <SolarHashTable.h>
#include "VarMsg.h"
using namespace util;
using namespace std;
class Sector;
class Object;
class Character;
class Player;
class Item;
class NPC;
struct AI_MSG;
typedef util::SolarHashTable<Player *> SECTOR_PLAYER_HASH;
typedef util::SolarHashTable<Player *>::iterator SECTOR_PLAYER_HASH_ITR;
typedef util::SolarHashTable<NPC *> SECTOR_NPC_HASH;
typedef util::SolarHashTable<NPC *>::iterator SECTOR_NPC_HASH_ITR;
typedef util::SolarHashTable<Item *> SECTOR_ITEM_HASH;
typedef util::SolarHashTable<Item *>::iterator SECTOR_ITEM_HASH_ITR;
class Sector
{
/// 拋膠飄 搬苞俊 蝶扼 彌利拳啊 夸備凳!
enum { MAX_BROADCAST_AT_ONCE_SIZE = 50 };
enum { DEFAULT_OBJECT_POOL_SIZE = 30 };
enum { MAX_DEFAULT_RENDERINFO_COUNT = 50 };
public:
Sector();
virtual ~Sector();
VOID Init( DWORD dwSectorIndex, WORD wGroupIndex );
VOID Release();
VOID Update( DWORD dwDeltaTick );
DWORD GetPlayerNum() { return m_pPlayerHashTable->GetDataNum(); }
// 按眉 火澇, 昏力
RC::eSECTOR_REULT AddObject( Object * pObject, BOOL bEnterField );
RC::eSECTOR_REULT RemoveObject( Object * pObject );
// 按眉 火澇, 昏力甫 林函俊 舅覆
RC::ePACKET_SEND_RESULT SendAddObject( Object * pObject, BOOL bVillage=FALSE );
RC::ePACKET_SEND_RESULT SendAddObject_Dir( Object * pObject, WORD wAngle );
RC::ePACKET_SEND_RESULT SendRemoveObject( Object * pObject );
// 腳痹 冀磐 瀝焊 眠啊, 昏力(敲飯撈絹俊霸 舅覆)
VOID SendAddSectorInfo( Object *pObject, BOOL bVillage=FALSE );
VOID SendDelSectorInfo( Object *pObject );
RC::ePACKET_SEND_RESULT SendPacketToSector( MSG_BASE_FORWARD * pMsg, WORD wSize ); // Sector俊 菩哦闌 焊晨
RC::ePACKET_SEND_RESULT SendPacketToSectorExceptMe( MSG_BASE_FORWARD * pMsg, WORD wSize, DWORD dwMyObjKey=0 ); // Sector俊 磊腳闌 力寇竅絆 菩哦闌 焊晨
RC::ePACKET_SEND_RESULT SendExPacketToSector( DWORD dwNumberOfMessages, BYTE **pMsg, WORD *pwSize );
RC::ePACKET_SEND_RESULT SendExPacketToSectorExceptMe( DWORD dwNumberOfMessages, BYTE **pMsg, WORD *pwSize, DWORD dwMyObjKey=0 );
Object* FindObject( eOBJECT_TYPE eObjecType, DWORD dwObjectKey );
VOID SendAIMessageToSectorExceptMe( Object *pObject, AI_MSG *pMsg, WORD wSize );
// 皋牢鷗百闌 吝繳欄肺 老瀝康開俊 加竅綽 某腐磐甸闌 茫綽促.
BYTE FindTargetsByAttacker( eSKILL_TARGET_TYPE eTargetType, Character* pAttacker, Character** pTargetArray, WzVector &vMainTargetPos,
float fRange, unsigned int uiRangeForm, float fArea,
BYTE byCountLimit, DWORD dwExceptTargetKey );
// 老瀝 康開俊 加竅綽 某腐磐甸闌 茫綽促.
BYTE FindTargetsByPosition( Character** pTargetArray, WzVector &vMainPos, float fRange, BYTE byCountLimit );
template <class PlayerFinder>
Character * SearchPlayer( PlayerFinder& finder );
template <class NPCFinder>
Character * SearchNPC( NPCFinder& finder );
template <class ItemFinder>
BOOL SearchFieldItem( ItemFinder& finder );
// 敲飯撈絹 府膠飄 iterating
template< class ObjectOperator >
VOID ForeachPlayer( ObjectOperator & Operator );
// 酒撈袍 府膠飄 iterating
template< class ObjectOperator >
VOID ForeachItem( ObjectOperator & Operator );
// NPC 府膠飄 iterating
template< class ObjectOperator >
VOID ForeachNPC( ObjectOperator & Operator );
// 轟器飄 貿府 包訪(弊縫, 冀磐 盒且)
VOID IncreaseReferencePlayer( Object *pObject );
VOID DecreaseReferencePlayer( Object *pObject );
inline WORD GetGroupIndex() { return m_wGroupIndex; }
inline DWORD GetSectorIndex() { return m_dwSectorIndex; }
protected:
VOID OnSendAddPlayer(Player *pPlayer, BOOL bVillage=FALSE); // Player狼 眠啊 菩哦 焊晨
VOID OnSendRemovePlayer(Player *pPlayer); // Player狼 力芭 菩哦 焊晨
VOID OnSendAddFieldItem(Item *pItem); // FieldItem狼 眠啊 菩哦 焊晨
VOID OnSendRemoveFieldItem(Item *pItem); // FieldItem狼 力芭 菩哦 焊晨
VOID OnSendAddNPC(NPC *pNPC); // NPC狼 眠啊 菩哦 焊晨
VOID OnSendAddNPC_Dir(NPC *pNPC, WORD wAngle); // NPC狼 眠啊 菩哦 焊晨 - 規氫 愛絆 積己登綽 版快
VOID OnSendRemoveNPC(NPC *pNPC); // NPC狼 力芭 菩哦 焊晨
VOID OnSendAllPlayersInfo( Player *pPlayer, BOOL bVillage );
private:
VOID OnSendSummonedInfo( Player *pPlayer, NPC *pNearNPC );
private:
int m_iPlayerReferenceCount; // 撈 冀磐狼 瀝焊甫 曼煉竅綽 敲飯撈絹狼 薦
WORD m_wGroupIndex; // 冀磐甸狼 弓瀾(弊縫) 牢鄲膠
DWORD m_dwSectorIndex; // 冀磐 牢鄲膠
SECTOR_PLAYER_HASH * m_pPlayerHashTable;
SECTOR_NPC_HASH * m_pNPCHashTable;
SECTOR_ITEM_HASH * m_pFieldItemHashTable;
static VarMsg m_VarMsg;
};
template <class PlayerFinder>
Character* Sector::SearchPlayer( PlayerFinder& finder )
{
// 利(敲飯撈絹) 府膠飄吝俊輯 矯具郴俊 甸絹坷綽 利撈 樂綽瘤 八葷
for( SECTOR_PLAYER_HASH_ITR it = m_pPlayerHashTable->begin() ; it != m_pPlayerHashTable->end() ; ++it )
{
if( finder((*it)) )
{
break;
}
}
return finder.GetTarget();
}
template <class NPCFinder>
Character* Sector::SearchNPC( NPCFinder& finder )
{
// 利(敲飯撈絹) 府膠飄吝俊輯 矯具郴俊 甸絹坷綽 利撈 樂綽瘤 八葷
for( SECTOR_NPC_HASH_ITR it = m_pNPCHashTable->begin() ; it != m_pNPCHashTable->end() ; ++it )
{
if( finder((*it)) )
{
break;
}
}
return finder.GetTarget();
}
template <class ItemFinder>
BOOL Sector::SearchFieldItem( ItemFinder& finder )
{
// 利(敲飯撈絹) 府膠飄吝俊輯 矯具郴俊 甸絹坷綽 利撈 樂綽瘤 八葷
for( SECTOR_ITEM_HASH_ITR it = m_pFieldItemHashTable->begin() ; it != m_pFieldItemHashTable->end() ; ++it )
{
if( finder((*it)) )
{
return TRUE;
}
}
return FALSE;
}
template< class ObjectOperator >
VOID Sector::ForeachPlayer( ObjectOperator & Operator )
{
for( SECTOR_PLAYER_HASH_ITR it = m_pPlayerHashTable->begin() ; it != m_pPlayerHashTable->end() ; ++it )
{
Operator((*it));
}
}
template< class ObjectOperator >
VOID Sector::ForeachItem( ObjectOperator & Operator )
{
for( SECTOR_ITEM_HASH_ITR it = m_pFieldItemHashTable->begin() ; it != m_pFieldItemHashTable->end() ; ++it )
{
Operator((*it));
}
}
template< class ObjectOperator >
VOID Sector::ForeachNPC( ObjectOperator & Operator )
{
for( SECTOR_NPC_HASH_ITR it = m_pNPCHashTable->begin() ; it != m_pNPCHashTable->end() ; ++it )
{
Operator((*it));
}
}
#endif // __SECTOR_H__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -