l2-unlegits/l2detect/UserAI_Die.cpp
alexey.min 609c1a48b3
2012-05-12 19:17:50 +00:00

98 lines
2.7 KiB
C++

#include "stdafx.h"
#include "USerAI.h"
#include "Logger.h"
#include "RadarDllWnd.h"
void UserAI::UAI_Parse_Die( class UserAI *cls, void *l2_game_packet )
{
L2GamePacket *p = (L2GamePacket *)l2_game_packet;
// parse
p->getPacketType();
unsigned int objectID = p->readUInt();
// end parse
if( objectID == cls->usr.objectID )
{
cls->usr.isDead = 1;
log_error( LOG_USERAI, "You died!\n" );
}
else
{
bool oid_found = false;
L2OBJECT_TYPE objType = L2OT_NONE;
int idx = -1;
if( WorldObjectTree_GetInfoByObjectID( objectID, &objType, &idx ) )
{
switch( objType )
{
case L2OT_PC:
{
chars_array[idx]->isAlikeDead = 1;
log_error( LOG_USERAI, "Character [%S] died\n", chars_array[idx]->charName );
RadarWnd_UpdChar( objectID );
} break;
case L2OT_NPC:
{
npc_array[idx]->isAlikeDead = 1;
RadarWnd_UpdNpc( objectID );
} break;
}
oid_found = true;
}
// update also party if needed
int party_idx = -1;
if( cls->party.isInParty( objectID, &party_idx ) )
{
L2Player *partyMember = cls->party.getPartyPlayer( party_idx );
if( partyMember )
{
log_error( LOG_USERAI, "Party member [%d] = [%S] died!\n", party_idx, partyMember->charName );
partyMember->isAlikeDead = 1;
oid_found = true;
}
}
if( !oid_found ) log_error( LOG_ERROR, "UserAI::UAI_Parse_Die(): cannot find objectID while Die\n" );
}
}
void UserAI::UAI_Parse_Revive( class UserAI *cls, void *l2_game_packet )
{
L2GamePacket *p = (L2GamePacket *)l2_game_packet;
int party_idx = 0;
// parse
p->getPacketType();
unsigned int objectID = p->readUInt();
// end parse
if( objectID == cls->usr.objectID )
{
// user is revived!
log_error( LOG_USERAI, "You revived!\n" );
cls->usr.isDead = 0;
//pcls->usr.canResurrectToVillage = pcls->usr.canResurrectToCH = pcls->usr.canResurrectToCastle =
// pcls->usr.canResurrectToFortress = pcls->usr.canResurrectToSiegeHQ = pcls->usr.canResurrectFixed = 0;
}
else if( cls->party.isInParty( objectID, &party_idx ) )
{
L2Player *partyMember = cls->party.getPartyPlayer( party_idx );
if( partyMember )
{
partyMember->isAlikeDead = 0;
log_error( LOG_USERAI, "Party player [%S] revived\n", partyMember->charName );
}
}
// someone in the world revived
int idx = -1;
L2OBJECT_TYPE objType = L2OT_NONE;
if( WorldObjectTree_GetInfoByObjectID( objectID, &objType, &idx ) )
{
switch( objType )
{
case L2OT_PC:
{
chars_array[idx]->isAlikeDead = 0;
log_error( LOG_USERAI, "Character [%S] revived\n", chars_array[idx]->charName );
RadarWnd_UpdChar( objectID );
} break;
}
}
}