This commit is contained in:
aozhiwei 2022-10-10 11:39:16 +08:00
parent 8940c24404
commit a7d97703ed
5 changed files with 102 additions and 2 deletions

View File

@ -127,6 +127,11 @@ float Ability::GetSpeedAddition()
return speed_addition_rate_; return speed_addition_rate_;
} }
int Ability::GetSpeedAdditionTimes()
{
return speed_addition_times_;
}
void Ability::AddDmgRuduce(float rate) void Ability::AddDmgRuduce(float rate)
{ {
dmg_ruduce_rate_ += rate; dmg_ruduce_rate_ += rate;
@ -150,6 +155,11 @@ float Ability::GetDmgRuduce()
return dmg_ruduce_rate_; return dmg_ruduce_rate_;
} }
int Ability::GetDmgRuduceTimes()
{
return dmg_ruduce_times_;
}
void Ability::AddDmgAddition(float rate) void Ability::AddDmgAddition(float rate)
{ {
dmg_addition_rate_ += rate; dmg_addition_rate_ += rate;
@ -172,3 +182,56 @@ float Ability::GetDmgAddition()
{ {
return dmg_addition_rate_; return dmg_addition_rate_;
} }
int Ability::GetDmgAdditionTimes()
{
return dmg_addition_times_;
}
void Ability::AddDefAddition(float rate)
{
def_addition_rate_ += rate;
++def_addition_times_;
}
void Ability::DelDefAddition(float rate)
{
def_addition_rate_ -= rate;
def_addition_rate_ = std::max(0.0f, def_addition_rate_);
--def_addition_times_;
#ifdef DEBUG
if (def_addition_times_ < 0) {
abort();
}
#endif
}
float Ability::GetDefAddition()
{
return def_addition_rate_;
}
int Ability::GetDefAdditionTimes()
{
return def_addition_times_;
}
void Ability::IncImmuneVertigo()
{
++immune_vertigo_times_;
}
void Ability::DecImmuneVertigo()
{
--immune_vertigo_times_;
#ifdef DEBUG
if (immune_vertigo_times_ < 0) {
abort();
}
#endif
}
int Ability::GetImmuneVertigoTimes()
{
return immune_vertigo_times_;
}

View File

@ -22,12 +22,22 @@ class Ability
void AddSpeedAddition(float rate); void AddSpeedAddition(float rate);
void DelSpeedAddition(float rate); void DelSpeedAddition(float rate);
float GetSpeedAddition(); float GetSpeedAddition();
int GetSpeedAdditionTimes();
void AddDmgRuduce(float rate); void AddDmgRuduce(float rate);
void DelDmgRuduce(float rate); void DelDmgRuduce(float rate);
float GetDmgRuduce(); float GetDmgRuduce();
int GetDmgRuduceTimes();
void AddDmgAddition(float rate); void AddDmgAddition(float rate);
void DelDmgAddition(float rate); void DelDmgAddition(float rate);
float GetDmgAddition(); float GetDmgAddition();
int GetDmgAdditionTimes();
void AddDefAddition(float rate);
void DelDefAddition(float rate);
float GetDefAddition();
int GetDefAdditionTimes();
void IncImmuneVertigo();
void DecImmuneVertigo();
int GetImmuneVertigoTimes();
private: private:
std::array<float, kHAT_End> buff_attr_abs_ = {}; std::array<float, kHAT_End> buff_attr_abs_ = {};
@ -42,4 +52,10 @@ class Ability
int dmg_addition_times_ = 0; int dmg_addition_times_ = 0;
float dmg_addition_rate_ = 0; float dmg_addition_rate_ = 0;
int def_addition_times_ = 0;
float def_addition_rate_ = 0;
int immune_vertigo_times_ = 0;
}; };

View File

@ -495,26 +495,34 @@ void Skill::ProcCMXD()
void Skill::ProcMYXY() void Skill::ProcMYXY()
{ {
float speed_rate = SkillHelper::GetMyxySpeedRate(meta);
float def_rate = SkillHelper::GetMyxyDefRate(meta);
owner->GetTrigger()->AddListener owner->GetTrigger()->AddListener
( (
kStartSwitchWeaponBuffEvent, kStartSwitchWeaponBuffEvent,
[this] (const std::vector<std::any>& params) [this, speed_rate, def_rate] (const std::vector<std::any>& params)
{ {
Buff* buff = std::any_cast<Buff*>(params.at(0)); Buff* buff = std::any_cast<Buff*>(params.at(0));
if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) {
return; return;
} }
owner->GetAbility()->AddSpeedAddition(speed_rate);
owner->GetAbility()->AddDefAddition(def_rate);
owner->GetAbility()->IncImmuneVertigo();
} }
); );
owner->GetTrigger()->AddListener owner->GetTrigger()->AddListener
( (
kEndSwitchWeaponBuffEvent, kEndSwitchWeaponBuffEvent,
[this] (const std::vector<std::any>& params) [this, speed_rate, def_rate] (const std::vector<std::any>& params)
{ {
Buff* buff = std::any_cast<Buff*>(params.at(0)); Buff* buff = std::any_cast<Buff*>(params.at(0));
if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) { if (!buff->skill_meta || buff->skill_meta->GetMagicId() != MAGIC_HJHX) {
return; return;
} }
owner->GetAbility()->DelSpeedAddition(speed_rate);
owner->GetAbility()->DelDefAddition(def_rate);
owner->GetAbility()->DecImmuneVertigo();
} }
); );
} }

View File

@ -386,3 +386,13 @@ float SkillHelper::GetSsjsSpeedRate(const MetaData::Skill* skill_meta)
{ {
return skill_meta->number_meta->float_speed; return skill_meta->number_meta->float_speed;
} }
float SkillHelper::GetMyxySpeedRate(const MetaData::Skill* skill_meta)
{
return skill_meta->number_meta->float_speed;
}
float SkillHelper::GetMyxyDefRate(const MetaData::Skill* skill_meta)
{
return skill_meta->number_meta->float_ratio;
}

View File

@ -50,6 +50,9 @@ class SkillHelper
static float GetSsjsTime(const MetaData::Skill* skill_meta); static float GetSsjsTime(const MetaData::Skill* skill_meta);
static float GetSsjsProb(const MetaData::Skill* skill_meta); static float GetSsjsProb(const MetaData::Skill* skill_meta);
static float GetSsjsSpeedRate(const MetaData::Skill* skill_meta); static float GetSsjsSpeedRate(const MetaData::Skill* skill_meta);
//免疫眩晕
static float GetMyxySpeedRate(const MetaData::Skill* skill_meta);
static float GetMyxyDefRate(const MetaData::Skill* skill_meta);
static void ProcBulletHitBuff(Bullet* bullet, Creature* c, int buff_uniid); static void ProcBulletHitBuff(Bullet* bullet, Creature* c, int buff_uniid);
static bool ProcBulletDmg(Bullet* bullet, Creature* target, float& finaly_dmg); static bool ProcBulletDmg(Bullet* bullet, Creature* target, float& finaly_dmg);