diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index c7bb4bf..32c6d01 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -132,7 +132,7 @@ enum BuffEffectType_e enum SkillFunc_e { kSkill_FuncNone = 0, - kSkill_Jump = 1, + kSkill_TurnOver = 1, kSkill_FuncEnd }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 1390974..429619e 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1209,11 +1209,7 @@ void Human::DoSkill() CancelAction(); } if (CanUseSkill()) { - use_skill = false; - curr_skill_phase = 0; - skill_dir = a8::Vec2(); - skill_target_pos = a8::Vec2(); - skill_param1 = 0.0f; + ResetSkill(); playing_skill = true; last_use_skill_frameno_ = room->GetFrameNo(); #if 1 @@ -1870,12 +1866,16 @@ void Human::ChangeToRace(RaceType_e race, int level) abort(); } exp_ = meta->i->exp(); + skill_meta_ = MetaMgr::Instance()->GetSkill(meta->i->active_skill()); + ResetSkill(); } else if (race_ == kZombieRace) { meta = MetaMgr::Instance()->GetPlayer(ZOMBIE_RACE_META_START_ID + level_ - 1); if (!meta) { abort(); } exp_ = meta->i->exp(); + skill_meta_ = MetaMgr::Instance()->GetSkill(meta->i->active_skill()); + ResetSkill(); } else { abort(); } @@ -1894,48 +1894,26 @@ void Human::WinExp(Human* sender, int exp) race_ != kZombieRace) { abort(); } - if (race_ == kHumanRace) { - exp_ += exp; - MetaData::Player* old_meta = meta; - do { - MetaData::Player* tmp_meta = MetaMgr::Instance()->GetPlayer - ( - HUMAN_RACE_META_START_ID + level_ - ); - if (!tmp_meta) { - break; - } - if (exp_ >= tmp_meta->i->exp()) { - meta = tmp_meta; - ++level_; - } else { - break; - } - } while(true); - if (old_meta != meta) { - room->frame_event.AddRaceChg(this); + exp_ += exp; + MetaData::Player* old_meta = meta; + int start_meta_id = race_ == kHumanRace ? HUMAN_RACE_META_START_ID : ZOMBIE_RACE_META_START_ID; + do { + + MetaData::Player* tmp_meta = MetaMgr::Instance()->GetPlayer(start_meta_id + level_); + if (!tmp_meta) { + break; } - } else if (race_ == kZombieRace) { - exp_ += exp; - MetaData::Player* old_meta = meta; - do { - MetaData::Player* tmp_meta = MetaMgr::Instance()->GetPlayer - ( - ZOMBIE_RACE_META_START_ID + level_ - ); - if (!tmp_meta) { - break; - } - if (exp_ >= tmp_meta->i->exp()) { - meta = tmp_meta; - ++level_; - } else { - break; - } - } while(true); - if (old_meta != meta) { - room->frame_event.AddRaceChg(this); + if (exp_ >= tmp_meta->i->exp()) { + meta = tmp_meta; + skill_meta_ = MetaMgr::Instance()->GetSkill(meta->i->active_skill()); + ResetSkill(); + ++level_; + } else { + break; } + } while (true); + if (old_meta != meta) { + room->frame_event.AddRaceChg(this); } } @@ -3080,11 +3058,7 @@ void Human::Revive() room->frame_event.AddRevive(this); room->OnHumanRevive(this); - use_skill = false; - curr_skill_phase = 0; - skill_dir = a8::Vec2(); - skill_param1 = 0.0f; - playing_skill = false; + ResetSkill(); SyncAroundPlayers(__FILE__, __LINE__, __func__); } else { auto callback = @@ -3253,7 +3227,7 @@ void Human::SelectSkillTargets(const a8::Vec2& target_pos, std::set& ta void Human::ProcSkillPhase(MetaData::SkillPhase* phase) { switch (phase->func_id) { - case kSkill_Jump: + case kSkill_TurnOver: { } break; @@ -3539,3 +3513,14 @@ ObjectSyncFlags* Human::GetObjectSyncFlags(int obj_uniid) return nullptr; } } + +void Human::ResetSkill() +{ + use_skill = false; + curr_skill_phase = 0; + skill_dir = a8::Vec2(); + skill_target_pos = a8::Vec2(); + skill_param1 = 0.0f; + playing_skill = false; +} + diff --git a/server/gameserver/human.h b/server/gameserver/human.h index e8c6969..84ba682 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -317,6 +317,7 @@ private: std::set& inc_grids, std::set& dec_grids); void RemoveFromScene(); + void ResetSkill(); protected: int level_ = 0;