75 lines
2.6 KiB
C++
75 lines
2.6 KiB
C++
#include "stdafx.h"
|
|
#include "Logger.h"
|
|
#include "L2Client.h"
|
|
|
|
/**
|
|
writeC(0x00);
|
|
writeD(_charObjId);
|
|
writeD(_canTeleport ? 0x01 : 0);
|
|
writeD(0x00); // 6d 01 00 00 00 - to hide away
|
|
writeD(0x00); // 6d 02 00 00 00 - to castle
|
|
writeD(0x00); // 6d 03 00 00 00 - to siege HQ
|
|
writeD(_sweepable ? 0x01 : 0x00); // sweepable (blue glow)
|
|
writeD(_access.allowFixedRes() ? 0x01: 0x00); // 6d 04 00 00 00 - to FIXED
|
|
writeD(0x00); // 6d 05 00 00 00 - to fortress **/
|
|
void L2Client::ph_Die( class L2Client *pcls, L2GamePacket *p )
|
|
{
|
|
int party_idx = 0;
|
|
p->getPacketType();
|
|
unsigned int objectID = p->readUInt();
|
|
//
|
|
if( objectID == pcls->usr.objectID ) // user died :(
|
|
{
|
|
// user died :(((
|
|
log_error( LOG_USERAI, "User died ((((((!\n" );
|
|
pcls->addChatToTab( CHAT_DMG, L"You are dead! :(((" );
|
|
pcls->usr.isDead = 1;
|
|
pcls->usr.canResurrectToVillage = p->readInt();
|
|
pcls->usr.canResurrectToCH = p->readInt();
|
|
pcls->usr.canResurrectToCastle = p->readInt();
|
|
pcls->usr.canResurrectToSiegeHQ = p->readInt();
|
|
p->readUInt(); // sweepable (user cannot be sweepable) )))
|
|
pcls->usr.canResurrectFixed = p->readInt();
|
|
pcls->usr.canResurrectToFortress = p->readInt();
|
|
return;
|
|
}
|
|
// died other world object, not user :)
|
|
// TODO: store isSweepable when mob dies
|
|
bool oid_found = false;
|
|
WorldObjectTreeNode wotNode;
|
|
if( pcls->world_tree.GetInfoByObjectID( objectID, &wotNode ) )
|
|
{
|
|
int idx = wotNode.getArrayIdx();
|
|
switch( wotNode.getObjectType() )
|
|
{
|
|
case L2OT_PC:
|
|
{
|
|
pcls->world_chars.chars_array[idx]->isAlikeDead = 1;
|
|
wchar_t wmes[128] = {0};
|
|
swprintf( wmes, 127, L"Character [%s] died", pcls->world_chars.chars_array[idx]->charName );
|
|
pcls->addChatToTab( CHAT_DMG, wmes );
|
|
} break;
|
|
case L2OT_NPC:
|
|
{
|
|
pcls->world_npcs.npcs_array[idx]->isAlikeDead = 1;
|
|
} break;
|
|
}
|
|
oid_found = true;
|
|
}
|
|
// update also party if needed
|
|
if( pcls->party.isInParty( objectID, &party_idx ) )
|
|
{
|
|
L2Player *partyMember = pcls->party.getPartyPlayer( party_idx );
|
|
if( partyMember )
|
|
{
|
|
log_error( LOG_USERAI, "Party member [%d] = [%S] died!\n", party_idx, partyMember->charName );
|
|
partyMember->isAlikeDead = 1;
|
|
wchar_t wmes[128] = {0};
|
|
swprintf( wmes, 127, L"Party member [%s] died!", partyMember->charName );
|
|
pcls->addChatToTab( CHAT_DMG, wmes );
|
|
oid_found = true;
|
|
}
|
|
}
|
|
if( !oid_found ) log_error( LOG_ERROR, "WOT cannot find objectID while Die\n" );
|
|
}
|