diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index fc54c5d..bc0890d 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -580,7 +580,7 @@ void Human::DoSkill() if (skill_meta && skill_meta->i->condition() == SC_Active) { int passed_time = (room->frame_no - last_use_skill_frameno_) * FRAME_RATE_MS; int skill_left_time = std::max(0, skill_meta->i->last_time() * 1000 - passed_time); - if (skill_left_time <= 0) { + if (skill_left_time <= 0 || last_use_skill_frameno_ == 0) { skill_xtimer_attacher_.ClearTimerList(); switch (skill_meta->i->type()) { case ST_Hide: @@ -938,10 +938,15 @@ void Human::FillMFActivePlayerData(cs::MFActivePlayerData* player_data) #endif #if 1 if (skill_meta) { - int passed_time = (room->frame_no - last_use_skill_frameno_) * FRAME_RATE_MS; - int skill_left_time = std::max(0, skill_meta->i->cd_time() * 1000 - passed_time); - player_data->set_skill_left_time(skill_left_time); - player_data->set_skill_cd_time(skill_meta->i->cd_time() * 1000); + if (last_use_skill_frameno_ == 0) { + player_data->set_skill_left_time(0); + player_data->set_skill_cd_time(skill_meta->i->cd_time() * 1000); + } else { + int passed_time = (room->frame_no - last_use_skill_frameno_) * FRAME_RATE_MS; + int skill_left_time = std::max(0, skill_meta->i->cd_time() * 1000 - passed_time); + player_data->set_skill_left_time(skill_left_time); + player_data->set_skill_cd_time(skill_meta->i->cd_time() * 1000); + } } #endif FillBodyState(player_data->mutable_states());