83 lines
2.1 KiB
C++
83 lines
2.1 KiB
C++
#include "StdAfx.h"
|
|
#include ".\enchantpoisonstatus.h"
|
|
#include "StatusManager.h"
|
|
#include "PacketStruct_CG.h"
|
|
#include "SkillInfoParser.h"
|
|
#include "AbilityFactory.h"
|
|
#include "Ability.h"
|
|
#include "Skill.h"
|
|
|
|
EnchantPoisonStatus::EnchantPoisonStatus()
|
|
{
|
|
}
|
|
|
|
EnchantPoisonStatus::~EnchantPoisonStatus()
|
|
{
|
|
}
|
|
|
|
void EnchantPoisonStatus::ExecuteSkill(Character* target)
|
|
{
|
|
if (obj_util::IsValid(target) == false)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Character* const owner = GetOwner();
|
|
if (owner == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
StatusManager* const tartget_status_manager = target->GetStatusManager();
|
|
if (tartget_status_manager->FindStatus(eCHAR_STATE_POISON2) != NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
const SLOTCODE skill_code = GetSkillCode();
|
|
const SkillScriptInfo* const skill_script_info =
|
|
SkillInfoParser::Instance()->GetSkillInfo(skill_code);
|
|
if (skill_script_info == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
const CODETYPE effect_ability_id = GetAbilityInfo()->m_iOption1;
|
|
const BASE_ABILITYINFO* const effect_ability_info =
|
|
skill_script_info->GetAbilityInfo(effect_ability_id);
|
|
if (effect_ability_info == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Ability* ability =
|
|
AbilityFactory::Instance()->AllocAbility(effect_ability_info->m_wAbilityID, SKILL_TYPE_ACTIVE);
|
|
if (ability == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
SkillInfo temp_skill_info;
|
|
ability->InitDetailed(owner, skill_code, &temp_skill_info, 0, effect_ability_info);
|
|
WzVector target_pos;
|
|
target->GetPos(&target_pos);
|
|
if (ability->CanExecute(owner, target, target->GetObjectKey(), target_pos) == false)
|
|
{
|
|
AbilityFactory::Instance()->FreeAbility(ability);
|
|
return;
|
|
}
|
|
|
|
AbilityStatus* const ability_status = tartget_status_manager->AllocAbilityStatus(owner, ability);
|
|
if (ability_status == NULL)
|
|
{
|
|
AbilityFactory::Instance()->FreeAbility( ability );
|
|
return;
|
|
}
|
|
ability_status->SendStatusAddBRD();
|
|
|
|
// delete
|
|
{
|
|
AbilityFactory::Instance()->FreeAbility(ability);
|
|
ability = NULL;
|
|
}
|
|
} |