73 lines
1.6 KiB
C++
73 lines
1.6 KiB
C++
#pragma once
|
|
|
|
namespace cs
|
|
{
|
|
class MFSkill;
|
|
}
|
|
|
|
enum SkillMinorType
|
|
{
|
|
SMT_NONE = 0,
|
|
SMT_BLINK = 1,
|
|
};
|
|
|
|
class Creature;
|
|
class Skill
|
|
{
|
|
public:
|
|
Creature* owner = nullptr;
|
|
const mt::Skill* meta = nullptr;
|
|
long long last_use_frameno = 0;
|
|
a8::Attacher xtimer_attacher;
|
|
int force_use_times = 0;
|
|
|
|
void Initialzie();
|
|
int GetCd();
|
|
int GetLeftTime();
|
|
int GetPassedTime();
|
|
int GetCurrTimes();
|
|
int GetMaxTimes();
|
|
int GetCurrExp();
|
|
void SetCurrExp(int exp);
|
|
int GetMaxExp();
|
|
void DecTimes();
|
|
void FillMFSkill(cs::MFSkill* skill_pb);
|
|
void ResetSkillCd();
|
|
void Accelerate(int time);
|
|
void LockCastPhase();
|
|
int GetMinorType() { return minor_type_; }
|
|
void AddMinorMode(
|
|
int minor_type,
|
|
int minor_cd_time,
|
|
std::function<void(int)> cb
|
|
);
|
|
void DoMinorMode();
|
|
void CancelMinorMode();
|
|
void ProcSkillPhase(const mt::SkillPhase* phase);
|
|
|
|
private:
|
|
void InitActiveSkill();
|
|
void InitPassiveSkill();
|
|
|
|
void NotifySkillState();
|
|
|
|
void Proc30701BAO();
|
|
|
|
void ProcShotPhase(const mt::SkillPhase* phase);
|
|
void ProcSpecDirShotPhase(const mt::SkillPhase* phase);
|
|
void ProcJumpToPhase(const mt::SkillPhase* phase);
|
|
void ProcNormalShotPhase(const mt::SkillPhase* phase);
|
|
|
|
private:
|
|
int curr_times_ = 0;
|
|
a8::XTimerWp inc_times_timer_;
|
|
a8::XTimerWp minor_mode_timer_;
|
|
int curr_exp_ = 0;
|
|
int minor_type_ = 0;
|
|
int minor_cd_time_ = 0;
|
|
long long minor_frameno_ = 0;
|
|
std::function<void(int)> minor_cb_;
|
|
|
|
friend class PBUtils;
|
|
};
|