void CDPSrvr::OnDoUseItemTarget( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize)
{
DWORD dwMaterial, dwTarget;
ar >> dwMaterial >> dwTarget;
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
if( IsValidObj( pUser ) )
{
CItemElem* pMaterial = (CItemElem*)pUser->GetItemId( dwMaterial );
CItemElem* pTarget = (CItemElem*)pUser->GetItemId( dwTarget );
if( !IsUsableItem( pMaterial ) || !IsUsableItem( pTarget ) )
return;
if( pUser->m_Inventory.IsEquip( dwTarget ) )
{
pUser->AddDefinedText( TID_GAME_EQUIPPUT );
return;
}
BOOL b = FALSE;
switch( pMaterial->m_dwItemId )
{
case II_SYS_SYS_QUE_PETRESURRECTION02_S:
case II_SYS_SYS_QUE_PETRESURRECTION02_A:
case II_SYS_SYS_QUE_PETRESURRECTION02_B:
{
CPet* pPet = pTarget->m_pPet;
if( !pPet || !pTarget->IsFlag( CItemElem::expired ) )
{
pUser->AddDefinedText( TID_GAME_PETRESURRECTION_WRONG_TARGET_01 );
}
else
{
BYTE nLevel = pPet->GetLevel();
if( ( nLevel == PL_B && pMaterial->m_dwItemId != II_SYS_SYS_QUE_PETRESURRECTION02_B )
|| ( nLevel == PL_A && pMaterial->m_dwItemId != II_SYS_SYS_QUE_PETRESURRECTION02_A )
|| ( nLevel == PL_S && pMaterial->m_dwItemId != II_SYS_SYS_QUE_PETRESURRECTION02_S )
|| ( nLevel < PL_B )
)
{
pUser->AddDefinedText( TID_GAME_PETRESURRECTION_WRONG_TARGET_02 );
}
else
{
PutItemLog( pUser, "r", "::PetResurrection", pTarget );
pTarget->ResetFlag( CItemElem::expired );
pUser->UpdateItem( (BYTE)( pTarget->m_dwObjId ), UI_FLAG, MAKELONG( pTarget->m_dwObjIndex, pTarget->m_byFlag ) );
pPet->SetLife( 0 );
pPet->SetEnergy( pPet->GetMaxEnergy() / 2 );
pUser->AddPetState( pTarget->m_dwObjId, pPet->GetLife(), pPet->GetEnergy(), pPet->GetExp() );
pUser->AddDefinedText( TID_GAME_PETRESURRECTION_SUCCESS );
b = TRUE;
}
}
break;
}
case II_SYS_SYS_SCR_AWAKECANCEL:
case II_SYS_SYS_SCR_AWAKECANCEL02:
b = DoUseItemTarget_InitializeRandomOption( pUser, pTarget, CRandomOptionProperty::eAwakening,
TID_GAME_AWAKECANCEL_INFO, TID_GAME_AWAKECANCEL,
"r", "::AwakeCancel" );
break;
case II_SYS_SYS_SCR_AWAKE:
#ifdef __NEW_ITEM_VARUNA
if( pTarget->GetProp()->IsBaruna() )
{
b = DoUseItemTarget_GenRandomOption( pUser, pTarget, CRandomOptionProperty::eAwakening,
0, TID_MMI_ERRORSENCHANT_BARUNA, TID_GAME_AWAKE_OR_BLESSEDNESS01,
"r", "::Awake" );
}else
#endif // __NEW_ITEM_VARUNA
{
b = DoUseItemTarget_GenRandomOption( pUser, pTarget, CRandomOptionProperty::eAwakening,
0, TID_GAME_INVALID_TARGET_ITEM, TID_GAME_AWAKE_OR_BLESSEDNESS01,
"r", "::Awake" );
}
break;
case II_SYS_SYS_SCR_BLESSEDNESS:
case II_SYS_SYS_SCR_BLESSEDNESS02:
b = DoUseItemTarget_GenRandomOption( pUser, pTarget, CRandomOptionProperty::eBlessing,
0, TID_GAME_USE_BLESSEDNESS_INFO, TID_GAME_BLESSEDNESS_INVALID_ITEM,
"r", "::Blessedness" );
break;
#if __VER >= 12 // __PET_0519
case II_SYS_SYS_SCR_EATPETAWAKE: // ¸ÔÆê °¢¼º
b = DoUseItemTarget_GenRandomOption( pUser, pTarget, CRandomOptionProperty::eEatPet,
TID_GAME_PETAWAKE_S00, TID_GAME_PETAWAKE_E00, TID_GAME_PETAWAKE_E00,
"r", "EATPETAWAKE" );
break;
case II_SYS_SYS_SCR_PETAWAKE: // ½Ã½ºÅÛ Æê °¢¼º
b = DoUseItemTarget_GenRandomOption( pUser, pTarget, CRandomOptionProperty::eSystemPet,
TID_GAME_PETAWAKE_S00, TID_GAME_PETAWAKE_E00, TID_GAME_PETAWAKE_E00,
"r", "PETAWAKE" );
break;
case II_SYS_SYS_SCR_PETAWAKECANCEL: // ½Ã½ºÅÛ Æê °¢¼º Ãë¼Ò
b = DoUseItemTarget_InitializeRandomOption( pUser, pTarget, CRandomOptionProperty::eSystemPet,
TID_GAME_PETAWAKECANCEL_S00, TID_GAME_PETAWAKECANCEL_E00,
"r", "PETAWAKECANCEL" );
break;
#endif // __PET_0519
case II_SYS_SYS_SCR_LEVELDOWN01:
case II_SYS_SYS_SCR_LEVELDOWN02:
b = DoUseItemTarget_ItemLevelDown( pUser, pMaterial, pTarget );
break;
default:
break;
}
if( b )
{
pUser->AddPlaySound( SND_INF_UPGRADESUCCESS );
if( pUser->IsMode( TRANSPARENT_MODE ) == 0 )
g_UserMng.AddCreateSfxObj( pUser, XI_INT_SUCCESS, pUser->GetPos().x, pUser->GetPos().y, pUser->GetPos().z );
PutItemLog( pUser, "u", "OnDoUseItemTarget", pMaterial );
pUser->UpdateItem( (BYTE)( pMaterial->m_dwObjId ), UI_NUM, pMaterial->m_nItemNum - 1 );
}
}
}
#endif // __SYS_IDENTIFY