aozhiwei 8f3f141f55 1
2023-11-03 17:10:22 +08:00

86 lines
1.9 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);
bool Actived() { return actived_; }
void Active();
void Deactive() { actived_ = false; }
bool IsMainSkill();
void LevelUp();
void Clear();
void Reset();
const mt::Skill* GetCurrSkillMeta();
int GetSkillId();
int GetBaseSkillId();
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:
bool actived_ = false;
int level_ = 1;
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_;
std::vector<int> hold_buffs_;
friend class PBUtils;
};