69 lines
1.6 KiB
C++
69 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#ifndef GAMESERVER_SUCTION_ABILITY_H_
|
|
#define GAMESERVER_SUCTION_ABILITY_H_
|
|
|
|
#include "BaseStatusAbility.h"
|
|
#include "SuctionStatus.h"
|
|
#include "StatusManager.h"
|
|
|
|
|
|
class SuctionAbility : public BaseStatusAbility
|
|
{
|
|
public:
|
|
SuctionAbility()
|
|
{
|
|
}
|
|
virtual ~SuctionAbility()
|
|
{
|
|
}
|
|
|
|
virtual bool IsValidStateID() const
|
|
{
|
|
switch (GetStateID())
|
|
{
|
|
case eCHAR_STATE_HP_SUCTION:
|
|
case eCHAR_STATE_MP_SUCTION: //CHANGUP_IMMUNITY_DAMAGE_STATUS
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
virtual bool Execute(Character* target, BYTE* msg, WORD& msg_size)
|
|
{
|
|
if (Ability::Execute(target, msg, msg_size) == false)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (IsValidStateID() == false)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
Character* const attacker = GetAttacker();
|
|
if (attacker == NULL)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
SuctionStatus* const ability_status =
|
|
(SuctionStatus*)attacker->GetStatusManager()->AllocAbilityStatus(attacker, this);
|
|
if (ability_status == NULL)
|
|
{
|
|
return false;
|
|
}
|
|
ability_status->SetTargetObjectKey(target->GetObjectKey());
|
|
|
|
SKILL_RESULT_CODE* const result_msg = (SKILL_RESULT_CODE*)msg;
|
|
if (result_msg != NULL)
|
|
{
|
|
result_msg->m_wStatusCode = ability_status->GetStateID();
|
|
result_msg->m_iStatusTime = ability_status->GetApplicationTime();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
};
|
|
|
|
#endif // GAMESERVER_SUCTION_ABILITY_H_
|