62 lines
1.8 KiB
C++
62 lines
1.8 KiB
C++
#include "stdafx.h"
|
|
#include "UserAI.h"
|
|
#include "Logger.h"
|
|
#include "RadarDllWnd.h"
|
|
|
|
void UserAI::UAI_Parse_DeleteObject( class UserAI *cls, void *l2_game_packet )
|
|
{
|
|
if( !l2_game_packet ) return;
|
|
L2GamePacket *p = (L2GamePacket *)l2_game_packet;
|
|
//
|
|
p->getPacketType();
|
|
unsigned int objectID = p->readUInt();
|
|
//
|
|
L2OBJECT_TYPE L2ObjectType = L2OT_NONE;
|
|
int indexInArray = 0;
|
|
if( WorldObjectTree_GetInfoByObjectID( objectID, &L2ObjectType, &indexInArray ) )
|
|
{
|
|
if( L2ObjectType == L2OT_NPC )
|
|
{
|
|
//log_error( LOG_USERAI, "UserAI: DeleteObject: oid %u is NPC\n", objectID );
|
|
NpcArray_DelNPCByIdx( indexInArray );
|
|
}
|
|
else if( L2ObjectType == L2OT_PC )
|
|
{
|
|
//log_error( LOG_USERAI, "UserAI: DeleteObject: oid %u is Player at index %d\n", objectID, indexInArray );
|
|
// remove from radar window
|
|
RadarWnd_NotifyTarget( objectID, 0, false );
|
|
// was it our offparty BD/SWS?
|
|
if( cls->off_BD_SWS.inv_bd_enable )
|
|
{
|
|
if( cls->offBD_inrange == true )
|
|
{
|
|
if( wcscmp( chars_array[indexInArray]->charName, cls->off_BD_SWS.nameBD ) == 0 )
|
|
{
|
|
cls->offBD_inrange = false;
|
|
log_error( LOG_USERAI, "BD [%S] out of range\n", cls->off_BD_SWS.nameBD );
|
|
}
|
|
}
|
|
}
|
|
if( cls->off_BD_SWS.inv_sws_enable )
|
|
{
|
|
if( cls->offSWS_inrange == true )
|
|
{
|
|
if( wcscmp( chars_array[indexInArray]->charName, cls->off_BD_SWS.nameSWS ) == 0 )
|
|
{
|
|
cls->offSWS_inrange = false;
|
|
log_error( LOG_USERAI, "SWS [%S] out of range\n", cls->off_BD_SWS.nameBD );
|
|
}
|
|
}
|
|
}
|
|
CharArray_DeleteCharByIdx( indexInArray );
|
|
}
|
|
else if( L2ObjectType == L2OT_ITEM )
|
|
{
|
|
//log_error( LOG_USERAI, "DeleteObject: deleting item %u...\n", objectID );
|
|
GIArray *gia = GIArray::getInstance();
|
|
gia->DelGIByArrayIdx( indexInArray );
|
|
WorldObjectTree_DelObject( objectID );
|
|
}
|
|
}
|
|
}
|