Initial MSVC 2008 projects workspace
This commit is contained in:
80
l2detect/UserAI_StatusUpdate.cpp
Normal file
80
l2detect/UserAI_StatusUpdate.cpp
Normal file
@@ -0,0 +1,80 @@
|
||||
#include "stdafx.h"
|
||||
#include "Logger.h"
|
||||
#include "UserAI.h"
|
||||
|
||||
void UserAI::UAI_Parse_StatusUpdate( class UserAI *cls, void *l2_game_packet )
|
||||
{
|
||||
L2GamePacket *p = (L2GamePacket *)l2_game_packet;
|
||||
p->getPacketType();
|
||||
unsigned int objectID = p->readUInt();
|
||||
// check if it is user's StatusUpdate or its target StatusUpdate
|
||||
if( (objectID == cls->usr.objectID) || (objectID == cls->usr.targetObjectID) )
|
||||
{
|
||||
cls->usr.parse_StatusUpdate( l2_game_packet );
|
||||
return;
|
||||
}
|
||||
// this is some other's StatusUpdate
|
||||
// find this object
|
||||
L2Character *chr = NULL;
|
||||
int idx = -1;
|
||||
L2OBJECT_TYPE objType = L2OT_NONE;
|
||||
if( !WorldObjectTree_GetInfoByObjectID( objectID, &objType, &idx ) )
|
||||
{
|
||||
log_error( LOG_WARNING, "UserAI::UAI_Parse_StatusUpdate(): cannot find objectID [%u]\n", objectID );
|
||||
return;
|
||||
}
|
||||
switch( objType )
|
||||
{
|
||||
case L2OT_NONE:
|
||||
case L2OT_ITEM:
|
||||
log_error( LOG_WARNING, "UserAI::UAI_Parse_StatusUpdate(): invalid object type (%d) for objectID [%u] (item or none)\n",
|
||||
(int)objType, objectID );
|
||||
return;
|
||||
break;
|
||||
case L2OT_PC:
|
||||
if( idx >= CHARARRAY_MAX_CHARS )
|
||||
{
|
||||
log_error( LOG_ERROR, "UserAI::UAI_Parse_StatusUpdate(): idx[%d] is too big for chars_array! [oid %u]\n",
|
||||
idx, objectID );
|
||||
return;
|
||||
}
|
||||
chr = (L2Character *)chars_array[idx];
|
||||
if( chr == NULL )
|
||||
log_error( LOG_ERROR, "UserAI::UAI_Parse_StatusUpdate(): chars_array[%d] is NULL! [oid %u]\n",
|
||||
idx, objectID );
|
||||
break;
|
||||
case L2OT_NPC:
|
||||
if( idx >= NPCA_MAX_NPCS )
|
||||
{
|
||||
log_error( LOG_ERROR, "UserAI::UAI_Parse_StatusUpdate(): idx[%d] is too big for npc_array! [oid %u]\n",
|
||||
idx, objectID );
|
||||
return;
|
||||
}
|
||||
chr = (L2Character *)npc_array[idx];
|
||||
if( chr == NULL )
|
||||
log_error( LOG_ERROR, "UserAI::UAI_Parse_StatusUpdate(): npc_array[%d] is NULL! [oid %u]\n",
|
||||
idx, objectID );
|
||||
break;
|
||||
}
|
||||
//
|
||||
const int CUR_HP = 0x09;
|
||||
const int MAX_HP = 0x0a;
|
||||
const int CUR_MP = 0x0b;
|
||||
const int MAX_MP = 0x0c;
|
||||
// parse next
|
||||
int i = 0;
|
||||
int numberOfAttributes = p->readInt();
|
||||
int attr_id, attr_val;
|
||||
for( i=0; i<numberOfAttributes; i++ )
|
||||
{
|
||||
attr_id = p->readUInt();
|
||||
attr_val = p->readUInt();
|
||||
switch( attr_id )
|
||||
{
|
||||
case CUR_HP: chr->curHp = attr_val; break;
|
||||
case MAX_HP: chr->maxHp = attr_val; break;
|
||||
case CUR_MP: chr->curMp = attr_val; break;
|
||||
case MAX_MP: chr->maxMp = attr_val; break;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user