98 lines
2.7 KiB
C++
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;
|
|
}
|
|
}
|
|
}
|