Files
Sun1602/Server/GameServer/SuctionAbility.h
T
2022-10-26 12:25:11 +08:00

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_