This commit is contained in:
aozhiwei 2022-11-28 11:06:03 +08:00
parent f9b538bea6
commit f86482d2eb
4 changed files with 71 additions and 0 deletions

View File

@ -321,3 +321,35 @@ int Ability::GetSpeedRuduceTimes()
{
return speed_ruduce_times_;
}
void Ability::IncDisableShotTimes()
{
++disable_shot_times_;
}
void Ability::DecDisableShotTimes()
{
--disable_shot_times_;
disable_shot_times_ = std::max(0, disable_shot_times_);
}
int Ability::GetDisableShotTimes()
{
return disable_shot_times_;
}
void Ability::IncDisableUseSkillTimes()
{
++disable_useskill_times_;
}
void Ability::DecDisableUseSkillTimes()
{
--disable_useskill_times_;
disable_useskill_times_ = std::max(0, disable_useskill_times_);
}
int Ability::GetDisableUseSkillTimes()
{
return disable_useskill_times_;
}

View File

@ -53,6 +53,14 @@ class Ability
bool CanImmune(int tag);
bool CanImmune(const std::set<int>& tags);
void IncDisableShotTimes();
void DecDisableShotTimes();
int GetDisableShotTimes();
void IncDisableUseSkillTimes();
void DecDisableUseSkillTimes();
int GetDisableUseSkillTimes();
private:
std::array<float, kHAT_End> buff_attr_abs_ = {};
std::array<float, kHAT_End> buff_attr_rate_ = {};
@ -76,6 +84,9 @@ class Ability
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_;
};

View File

@ -192,6 +192,15 @@ int Creature::AddBuff(Creature* caster,
if (buff->meta->i->lock_move()) {
IncDisableMoveTimes();
}
if (buff->meta->i->lock_dir()) {
IncDisableAttackDirTimes();
}
if (buff->meta->i->disable_shot()) {
GetAbility()->IncDisableShotTimes();
}
if (buff->meta->i->disable_useskill()) {
GetAbility()->IncDisableUseSkillTimes();
}
list_add_tail(&buff->effect_entry, &buff_effect_[buff->meta->i->buff_effect()]);
if (buff->meta->i->depend_effect() != 0 &&
IsValidBuffEffect(buff->meta->i->depend_effect())) {
@ -563,6 +572,15 @@ void Creature::OnBuffRemove(Buff& buff)
if (buff.meta->i->lock_move()) {
DecDisableMoveTimes();
}
if (buff.meta->i->lock_dir()) {
DecDisableAttackDirTimes();
}
if (buff.meta->i->disable_shot()) {
GetAbility()->DecDisableShotTimes();
}
if (buff.meta->i->disable_useskill()) {
GetAbility()->DecDisableUseSkillTimes();
}
#if 999
if (buff.meta->i->buff_id() == 8042) {
if (GetAbility()->GetSpeedRuduceTimes() > 0) {
@ -793,6 +811,9 @@ bool Creature::CanUseSkill(int skill_id)
if (!skill) {
return false;
}
if (GetAbility()->GetDisableUseSkillTimes() > 0) {
return false;
}
if (room->GetGasData().GetGasMode() == GasInactive &&
!MetaMgr::Instance()->prebattle_can_use_skill) {
return false;
@ -1819,6 +1840,10 @@ void Creature::Shot(a8::Vec2& target_dir, bool& shot_ok, float fly_distance, int
return;
}
if (GetAbility()->GetDisableShotTimes() > 0) {
return;
}
if (GetCurrWeapon()->weapon_idx != 0 &&
GetCurrWeapon()->ammo <= 0) {
CheckLoadingBullet();

View File

@ -375,6 +375,9 @@ message Buff
optional int32 dead_remove = 29;
optional int32 no_immune = 30;
optional int32 lock_move = 31;
optional int32 lock_dir = 34;
optional int32 disable_shot = 32;
optional int32 disable_useskill = 33;
}
message Drop