diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index b71d3108..981bf84f 100644 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -473,6 +473,12 @@ enum PolyExtDataFlag_e kWater3ExtFlag = 3, //游泳不能射击 }; +A8_DECLARE_ENUM(TimerUserEvent_e, + kCheckShotHoldStateTimerEvent = 100, + kShenBaoAddTimeTimerEvent, + kAddDjsHaloRangeTimerEvent + ); + const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_ROOT_FMT = "/data/logs/%s"; @@ -530,8 +536,5 @@ const int ANDROID_AI_ID_START = 10001; const int MAX_SKILL_LV = 15; -const int CHECK_SHOT_HOLD_STATE_TIMER_EVENT = a8::TIMER_USER_EVENT + 1; -const int SHEN_BAO_ADD_TIME_TIMER_EVENT = a8::TIMER_USER_EVENT + 2; - const int kReviveTimeAdd = 12; const int kSkinNum = 4; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index ae1c882c..4926dc71 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2191,7 +2191,7 @@ void Human::ProcUseItemAction() +stats.use_medicine_times; if (!shen_bao_timer.expired()) { a8::Args args({item_meta->time()}); - room->xtimer.FireEvent(shen_bao_timer, SHEN_BAO_ADD_TIME_TIMER_EVENT, &args); + room->xtimer.FireEvent(shen_bao_timer, kShenBaoAddTimeTimerEvent, &args); } else { int exec_time = 0; int total_time = item_meta->time(); @@ -2208,7 +2208,7 @@ void Human::ProcUseItemAction() } else { AddHp(heal); } - } else if (SHEN_BAO_ADD_TIME_TIMER_EVENT == event) { + } else if (kShenBaoAddTimeTimerEvent == event) { total_time += args->Get(0); } }, diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index d53ca67c..1d900dcd 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1456,7 +1456,7 @@ void Player::CheckShotHoldState(Weapon* weapon) } if (!shot_hold_timer.expired()) { a8::Args args({weapon->meta->_buff_meta->buff_id()}); - room->xtimer.FireEvent(shot_hold_timer, CHECK_SHOT_HOLD_STATE_TIMER_EVENT, &args); + room->xtimer.FireEvent(shot_hold_timer, kCheckShotHoldStateTimerEvent, &args); } //second if (shot_hold_timer.expired()) { @@ -1471,7 +1471,7 @@ void Player::CheckShotHoldState(Weapon* weapon) if (dead || !shot_hold) { room->xtimer.Delete(shot_hold_timer); } - } else if (CHECK_SHOT_HOLD_STATE_TIMER_EVENT == event) { + } else if (kCheckShotHoldStateTimerEvent == event) { if (args->Get(0) != buff_id) { room->xtimer.Delete(shot_hold_timer); } diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index f11c8f89..d67fec7d 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -277,7 +277,7 @@ void Skill::InitPassiveSkill() break; case MAGIC_30601_DJS: { - ProcMYXY(); + Proc30601DJS(); } break; case MAGIC_30701_BAO: @@ -606,54 +606,34 @@ void Skill::ProcCMXD() ); } -void Skill::ProcMYXY() +void Skill::Proc30601DJS() { - float speed_rate = SkillHelper::GetMyxySpeedRate(meta); - float atk_rate = SkillHelper::GetMyxyAtkRate(meta); - std::shared_ptr immune_buff_uniid = std::make_shared(0); + a8::XTimerWp timer = owner->room->xtimer.SetIntervalWpEx + ( + GetCd() / FRAME_RATE_MS, + [this] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + if (!owner->dead) { + + } + } + }, + &xtimer_attacher); + owner->GetTrigger()->AddListener ( kUseSkillEvent, - [this, speed_rate, atk_rate, immune_buff_uniid] - (const a8::Args& args) + [this, timer] (const a8::Args& args) mutable { - Skill* skill = args.Get(0); - if (skill->meta->GetMagicId() != MAGIC_20201_HX) { - return; - } - owner->GetAbility()->AddSpeedAddition(speed_rate); - if (*immune_buff_uniid) { - owner->RemoveBuffByUniId(*immune_buff_uniid); - *immune_buff_uniid = 0; - } + if (!timer.expired()) { + Skill* skill = args.Get(0); + if (skill->meta->GetMagicId() == MAGIC_20601_DJS) { - owner->TryAddBuff - (owner, - kDispelEffectBuffId, - meta); - - *immune_buff_uniid = owner->TryAddBuffAndSetTime - (owner, - kImmuneEffectBuffId, - meta->_number_meta->_float_time * 1000, - meta); - owner->GetAbility()->DelSpeedAddition(speed_rate); + } + } } ); -#ifdef DEBUG - { - std::string dbg_msg = a8::Format - ( - "skill_id:%d 免疫眩晕 攻击力:%f 移动提升:%f", - { - meta->skill_id(), - atk_rate, - speed_rate - }); - owner->SendDebugMsg(dbg_msg); - a8::XPrintf("%s\n", {dbg_msg}); - } -#endif } void Skill::ProcGZJS() diff --git a/server/gameserver/skill.h b/server/gameserver/skill.h index b84ae358..6fff4b6e 100644 --- a/server/gameserver/skill.h +++ b/server/gameserver/skill.h @@ -55,7 +55,7 @@ private: void Proc30301XL(); void ProcSWZB(); void ProcCMXD(); - void ProcMYXY(); + void Proc30601DJS(); void ProcGZJS(); void ProcJYFH(); void ProcFH();