l2-unlegits/l2detect/UserAI_Item.cpp
2012-02-01 05:25:08 +00:00

109 lines
2.8 KiB
C++

#include "stdafx.h"
#include "UserAI.h"
#include "ConfigIni.h"
extern class CConfig g_cfg;
/*
writeC(0x16);
writeD(_charObjId);
writeD(_item.getObjectId());
writeD(_item.getItemId());
writeD(_item.getX());
writeD(_item.getY());
writeD(_item.getZ());
// only show item count if it is a stackable item
writeD( _item.isStackable() ? 0x01 : 0x00 );
writeD(_item.getCount()); //////// writeQ(_count) since L2 >= T2.3
writeD(1); // unknown */
void UserAI::UAI_Parse_DropItem( class UserAI *cls, void *l2_game_packet )
{
UNREFERENCED_PARAMETER(cls);
if( !l2_game_packet ) return;
L2GamePacket *p = (L2GamePacket *)l2_game_packet;
p->getPacketType();
/*unsigned int charOid = */ p->readUInt();
unsigned int itemOid = p->readUInt();
unsigned int itemId = p->readUInt();
int x = p->readD();
int y = p->readD();
int z = p->readD();
int isStackable = p->readD();
unsigned long long int count = 0;
if( g_cfg.L2_version <= (int)L2_VERSION_T22 )
count = p->readUInt();
else
count = p->readUInt64();
GroundItem gi;
gi.count = count;
gi.itemID = itemId;
gi.objectID = itemOid;
gi.stackable = isStackable;
gi.setXYZ( x, y, z );
//
GIArray *gia = GIArray::getInstance();
gia->Lock();
// try to find existing
int idx = 0;
if( (idx = gia->FindGIByObjectID( gi.objectID )) != -1 )
gia->UpdateGIInfo( idx, &gi );
else
{
idx = gia->AddGIInfo( &gi );
if( (idx >= 0) && (idx<gia->GA_MAX_ITEMS) )
WorldObjectTree_AddObject( itemOid, L2OT_ITEM, idx );
}
gia->Unlock();
}
/*
writeC(0x05);
writeD(_objectId);
writeD(_itemId);
writeD(_x);
writeD(_y);
writeD(_z);
// only show item count if it is a stackable item
writeD(_stackable);
writeD(_count); //////// writeQ(_count) since L2 >= T2.3
writeD(0x00); //c2 */
void UserAI::UAI_Parse_SpawnItem( class UserAI *cls, void *l2_game_packet )
{
UNREFERENCED_PARAMETER(cls);
if( !l2_game_packet ) return;
L2GamePacket *p = (L2GamePacket *)l2_game_packet;
p->getPacketType();
unsigned int itemOid = p->readUInt();
unsigned int itemId = p->readUInt();
int x = p->readD();
int y = p->readD();
int z = p->readD();
int isStackable = p->readD();
unsigned long long int count = 0;
if( g_cfg.L2_version <= (int)L2_VERSION_T22 )
count = p->readUInt();
else
count = p->readUInt64();
GroundItem gi;
gi.count = count;
gi.itemID = itemId;
gi.objectID = itemOid;
gi.stackable = isStackable;
gi.setXYZ( x, y, z );
//
GIArray *gia = GIArray::getInstance();
gia->Lock();
// try to find existing
int idx = 0;
if( (idx = gia->FindGIByObjectID( gi.objectID )) != -1 )
gia->UpdateGIInfo( idx, &gi );
else
{
idx = gia->AddGIInfo( &gi );
if( (idx >= 0) && (idx<gia->GA_MAX_ITEMS) )
WorldObjectTree_AddObject( itemOid, L2OT_ITEM, idx );
}
gia->Unlock();
}