Initial MSVC 2008 projects workspace
This commit is contained in:
119
l2ooghelper/WorldObjectTree.cpp
Normal file
119
l2ooghelper/WorldObjectTree.cpp
Normal file
@@ -0,0 +1,119 @@
|
||||
#include "stdafx.h"
|
||||
#include "WorldObjectTree.h"
|
||||
#ifdef _DEBUG
|
||||
#include "Logger.h"
|
||||
#endif
|
||||
|
||||
void WorldObjectTree::Init()
|
||||
{
|
||||
world_object_tree = new BinTree();
|
||||
#ifdef WOT_LOCK
|
||||
InitializeCriticalSection( &wot_cs );
|
||||
#endif
|
||||
}
|
||||
|
||||
void WorldObjectTree::Free()
|
||||
{
|
||||
#ifdef WOT_LOCK
|
||||
EnterCriticalSection( &wot_cs );
|
||||
#endif
|
||||
delete world_object_tree;
|
||||
world_object_tree = NULL;
|
||||
#ifdef WOT_LOCK
|
||||
LeaveCriticalSection( &wot_cs );
|
||||
DeleteCriticalSection( &wot_cs );
|
||||
#endif
|
||||
}
|
||||
|
||||
BOOL WorldObjectTree::GetInfoByObjectID( unsigned int objectID, WorldObjectTreeNode *pNode )
|
||||
{
|
||||
//if( !world_object_tree ) return FALSE;
|
||||
pNode->~WorldObjectTreeNode();
|
||||
#ifdef WOT_LOCK
|
||||
EnterCriticalSection( &wot_cs );
|
||||
#endif
|
||||
WorldObjectTreeNode *node = (WorldObjectTreeNode *)world_object_tree->findNode( objectID );
|
||||
#ifdef WOT_LOCK
|
||||
LeaveCriticalSection( &wot_cs );
|
||||
#endif
|
||||
if( !node ) return FALSE;
|
||||
pNode->setFrom( node );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL WorldObjectTree::AddObject( unsigned int objectID, WorldObjectTreeNode *pNode )
|
||||
{
|
||||
//if( !world_object_tree ) return FALSE;
|
||||
WorldObjectTreeNode *wotNode = new WorldObjectTreeNode();
|
||||
wotNode->setFrom( pNode );
|
||||
wotNode->key = objectID;
|
||||
#ifdef WOT_LOCK
|
||||
EnterCriticalSection( &wot_cs );
|
||||
#endif
|
||||
|
||||
#ifdef _WOT_PC_DEBUG
|
||||
if( wotNode->getObjectType() == L2OT_PC )
|
||||
log_error( LOG_USERAI, "WOT: adding PC oid %u (idx %d)", objectID, wotNode->getArrayIdx() );
|
||||
#endif
|
||||
|
||||
bool ret = world_object_tree->addNode( wotNode );
|
||||
|
||||
#ifdef _WOT_PC_DEBUG
|
||||
if( wotNode->getObjectType() == L2OT_PC )
|
||||
{
|
||||
if( ret ) log_error_np( LOG_USERAI, " ... add ok\n" );
|
||||
else log_error_np( LOG_USERAI, " ... ERROR!\n" );
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WOT_LOCK
|
||||
LeaveCriticalSection( &wot_cs );
|
||||
#endif
|
||||
if( ret ) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WorldObjectTree::DelObject( unsigned int objectID )
|
||||
{
|
||||
//if( !world_object_tree ) return FALSE;
|
||||
#ifdef WOT_LOCK
|
||||
EnterCriticalSection( &wot_cs );
|
||||
#endif
|
||||
|
||||
#ifdef _WOT_PC_DEBUG
|
||||
BOOL ret = FALSE;
|
||||
WorldObjectTreeNode *node = (WorldObjectTreeNode *)world_object_tree->findNode( objectID );
|
||||
if( node )
|
||||
{
|
||||
L2OBJECT_TYPE objectType = node->getObjectType();
|
||||
//if( objectType == L2OT_PC )
|
||||
// log_error( LOG_USERAI, "WOT: deleting PC oid %u (idx %d)", node->key, node->getArrayIdx() );
|
||||
// detete!
|
||||
ret = world_object_tree->delNode( node );
|
||||
// again debug print
|
||||
if( objectType == L2OT_PC )
|
||||
{
|
||||
if( ret ) log_error_np( LOG_USERAI, " ... del ok\n" );
|
||||
else log_error_np( LOG_USERAI, " ... ERROR\n" );
|
||||
}
|
||||
}
|
||||
#else
|
||||
BOOL ret = (BOOL)world_object_tree->delNode( objectID );
|
||||
#endif
|
||||
|
||||
#ifdef WOT_LOCK
|
||||
LeaveCriticalSection( &wot_cs );
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
void WorldObjectTree::DeleteAll()
|
||||
{
|
||||
#ifdef WOT_LOCK
|
||||
EnterCriticalSection( &wot_cs );
|
||||
#endif
|
||||
this->world_object_tree->deleteAll();
|
||||
#ifdef WOT_LOCK
|
||||
LeaveCriticalSection( &wot_cs );
|
||||
#endif
|
||||
}
|
Reference in New Issue
Block a user