aozhiwei 70c33cd599 1
2023-03-09 07:51:00 +08:00

100 lines
2.4 KiB
C++

#pragma once
#include "attrdefine.h"
#include "weakptr.h"
class Room;
class Human;
class Ability
{
public:
CreatureWeakPtr owner;
void Clear();
float GetAttrAbs(int attr_id);
float GetAttrRate(int attr_id);
float GetBuffAttrAbs(int attr_id);
float GetBuffAttrRate(int attr_id);
float* GetBuffAttrAbsPtr(int attr_id);
float* GetBuffAttrRatePtr(int attr_id);
void AddSpeedAddition(float rate);
void DelSpeedAddition(float rate);
float GetSpeedAddition();
int GetSpeedAdditionTimes();
void AddSpeedRuduce(float rate);
void DelSpeedRuduce(float rate);
float GetSpeedRuduce();
int GetSpeedRuduceTimes();
void AddDmgRuduce(float rate);
void DelDmgRuduce(float rate);
float GetDmgRuduce();
int GetDmgRuduceTimes();
void AddDmgAddition(float rate);
void DelDmgAddition(float rate);
float GetDmgAddition();
int GetDmgAdditionTimes();
void AddDefAddition(float rate);
void DelDefAddition(float rate);
float GetDefAddition();
int GetDefAdditionTimes();
void AddAtkAddition(float rate);
void DelAtkAddition(float rate);
float GetAtkAddition();
int GetAtkAdditionTimes();
void IncImmuneTimes(int tag);
void DecImmuneTimes(int tag);
bool CanImmune(int tag);
bool CanImmune(const std::set<int>& tags);
void IncDisableShotTimes();
void DecDisableShotTimes();
int GetDisableShotTimes();
void IncDisableUseSkillTimes();
void DecDisableUseSkillTimes();
int GetDisableUseSkillTimes();
void SetFixedSpeed(float speed);
void UnSetFixedSpeed();
int GetFixedSpeedTimes();
float GetFixedSped();
private:
std::array<float, kHAT_End> buff_attr_abs_ = {};
std::array<float, kHAT_End> buff_attr_rate_ = {};
std::array<int, kHAT_End> buff_attr_flag_ = {};
int speed_addition_times_ = 0;
float speed_addition_rate_ = 0;
int speed_ruduce_times_ = 0;
float speed_ruduce_rate_ = 0;
int dmg_ruduce_times_ = 0;
float dmg_ruduce_rate_ = 0;
int dmg_addition_times_ = 0;
float dmg_addition_rate_ = 0;
int def_addition_times_ = 0;
float def_addition_rate_ = 0;
int atk_addition_times_ = 0;
float atk_addition_rate_ = 0;
int disable_shot_times_ = 0;
int disable_useskill_times_ = 0;
std::map<int, int> immune_tags_;
int fixed_speed_times_ = 0.0f;
float fixed_speed_ = 0.0f;
friend class PBUtils;
};