diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index c0a2523c..56c7a90f 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -758,13 +758,12 @@ void Buff::ProcAutoShot() &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Buff* buff = (Buff*)param.sender.GetUserData(); - if (buff->owner->IsHuman()) { - #if 0 - buff->owner->AsHuman()->shot_start = false; - #endif - buff->owner->AsHuman()->shot_hold = false; - buff->owner->AsHuman()->series_shot_frames = 0; + if (!is_destory) { + Buff* buff = (Buff*)param.sender.GetUserData(); + if (buff->owner->IsHuman()) { + buff->owner->AsHuman()->shot_hold = false; + buff->owner->AsHuman()->series_shot_frames = 0; + } } }); } diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index ba6f193d..b2493ff2 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -213,9 +213,11 @@ int Creature::AddBuff(Creature* caster, &buff->xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Buff* buff = (Buff*)param.param2.GetUserData(); - if (buff->remover_timer) { - buff->remover_timer = nullptr; + if (!is_destory) { + Buff* buff = (Buff*)param.param2.GetUserData(); + if (buff->remover_timer) { + buff->remover_timer = nullptr; + } } }); } @@ -3004,8 +3006,10 @@ void Creature::AutoSwitchWeapon() &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { + if (!is_destory) { Creature* c = (Creature*)param.sender.GetUserData(); c->auto_switch_weapon_timer_ = nullptr; + } }); } else { switch_func(param); @@ -3045,9 +3049,11 @@ void Creature::CheckLoadingBullet() &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Creature* c = (Creature*)param.sender.GetUserData(); - if (c->reload_delay_timer_) { - c->reload_delay_timer_ = nullptr; + if (!is_destory) { + Creature* c = (Creature*)param.sender.GetUserData(); + if (c->reload_delay_timer_) { + c->reload_delay_timer_ = nullptr; + } } }); } else { @@ -3437,8 +3443,10 @@ void Creature::LockAttackDir(int time) &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Creature* c = (Creature*)param.sender.GetUserData(); - c->DecDisableAttackDirTimes(); + if (!is_destory) { + Creature* c = (Creature*)param.sender.GetUserData(); + c->DecDisableAttackDirTimes(); + } } ); } diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index e41c9eb5..1b11ce5c 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2936,8 +2936,10 @@ void Human::Revive() &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Human* hum = (Human*)param.sender.GetUserData(); - hum->revive_timer = nullptr; + if (!is_destory) { + Human* hum = (Human*)param.sender.GetUserData(); + hum->revive_timer = nullptr; + } }); SyncAroundPlayers(__FILE__, __LINE__, __func__); } @@ -3356,8 +3358,10 @@ void Human::ProcUseItemAction() &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Human* hum = (Human*)param.sender.GetUserData(); - hum->pain_killer_timer = nullptr; + if (!is_destory) { + Human* hum = (Human*)param.sender.GetUserData(); + hum->pain_killer_timer = nullptr; + } }); } AddHp(item_meta->i->heal()); @@ -3917,8 +3921,10 @@ void Human::StartRefreshViewTimer() &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Human* hum = (Human*)param.sender.GetUserData(); - hum->refresh_view_timer_ = nullptr; + if (!is_destory) { + Human* hum = (Human*)param.sender.GetUserData(); + hum->refresh_view_timer_ = nullptr; + } }); } @@ -4524,8 +4530,10 @@ void Human::DoFollow(int target_id) &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Player* hum = (Player*)param.sender.GetUserData(); - hum->follow_target_timer_ = nullptr; + if (!is_destory) { + Player* hum = (Player*)param.sender.GetUserData(); + hum->follow_target_timer_ = nullptr; + } }); } } @@ -4652,8 +4660,10 @@ void Human::InternalBeKill(int killer_id, const std::string& killer_name, int we &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Human* hum = (Human*)param.sender.GetUserData(); - hum->dead_timer = nullptr; + if (!is_destory) { + Human* hum = (Human*)param.sender.GetUserData(); + hum->dead_timer = nullptr; + } }); } else { OnDie(); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 1458b53d..5b782246 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1462,9 +1462,11 @@ void Player::CheckShotHoldState(Weapon* weapon) &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Human* hum = (Human*)param.sender.GetUserData(); - hum->RemoveBuffById(param.param1); - hum->shot_hold_timer = nullptr; + if (!is_destory) { + Human* hum = (Human*)param.sender.GetUserData(); + hum->RemoveBuffById(param.param1); + hum->shot_hold_timer = nullptr; + } }); } } @@ -1506,8 +1508,10 @@ void Player::AsyncRequestWatchWar(bool send_rsp_msg) &xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Player* hum = (Player*)param.sender.GetUserData(); - hum->watch_war_req_timer_ = nullptr; + if (!is_destory) { + Player* hum = (Player*)param.sender.GetUserData(); + hum->watch_war_req_timer_ = nullptr; + } }); } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 6911ddd0..e2c209b2 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1357,8 +1357,10 @@ void Room::UpdateGasInactivePvp() &xtimer_attacher_.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Room* room = (Room*)param.sender.GetUserData(); - room->auto_jump_timer_ = nullptr; + if (!is_destory) { + Room* room = (Room*)param.sender.GetUserData(); + room->auto_jump_timer_ = nullptr; + } }); #ifdef DEBUG a8::XPrintf("max_run_delay:%d %d\n", {PerfMonitor::Instance()->max_run_delay_time, diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index a3d91174..09a9587a 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -196,12 +196,14 @@ void Skill::AddMinorMode( &owner->xtimer_attacher.timer_list_, [] (const a8::XParams& param, bool is_destory) { - Skill* skill = (Skill*)param.sender.GetUserData(); - skill->minor_type_ = SMT_NONE; - skill->minor_cd_time_ = 0; - skill->minor_frameno_ = 0; - skill->minor_cb_ = nullptr; - skill->minor_mode_timer_ = nullptr; + if (!is_destory) { + Skill* skill = (Skill*)param.sender.GetUserData(); + skill->minor_type_ = SMT_NONE; + skill->minor_cd_time_ = 0; + skill->minor_frameno_ = 0; + skill->minor_cb_ = nullptr; + skill->minor_mode_timer_ = nullptr; + } } ); if (owner->IsHuman()) {