diff --git a/server/gameserver/battledatacontext.cc b/server/gameserver/battledatacontext.cc index ef600766..e1ba17f9 100644 --- a/server/gameserver/battledatacontext.cc +++ b/server/gameserver/battledatacontext.cc @@ -426,6 +426,7 @@ void BattleDataContext::ParseResult(a8::XObject& obj) hero_dto = obj.At("hero_dto"); hero_ability_->hero_uniid_ = hero_dto->Get("hero_uniid", ""); hero_ability_->hero_dto = hero_dto; + hero_lv_ = hero_dto->HasKey("hero_lv") ? hero_dto->Get("hero_lv").GetInt() : 1; const mt::Hero* meta = mt::Hero::GetById(hero_dto->Get("hero_id", "")); if (meta) { hero_ability_->hero_meta = meta; @@ -986,3 +987,8 @@ float BattleDataContext::GetRecoverHpAdd() { return hero_ability_->GetRecoverHpAdd(); } + +int BattleDataContext::GetHeroLevel() +{ + return std::max(hero_lv_, 1); +} diff --git a/server/gameserver/battledatacontext.h b/server/gameserver/battledatacontext.h index 694d0115..9b1231e1 100644 --- a/server/gameserver/battledatacontext.h +++ b/server/gameserver/battledatacontext.h @@ -77,6 +77,7 @@ struct BattleDataContext int GetSkinId(); int GetLevel(); + int GetHeroLevel(); private: void Clear(); @@ -101,6 +102,7 @@ private: int skin_id_ = 0; int level_ = 0; + int hero_lv_ = 0; int skill1_lv = 1; int skill2_lv = 1; diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 6d993d3e..132920c0 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -93,6 +93,7 @@ class Creature : public MoveableEntity int energy_shield = 0; int max_energy_shield = 0; int level = 1; + int hero_level = 1; Weapon second_weapon; glm::vec3 skill_pos; diff --git a/server/gameserver/gungrasp.cc b/server/gameserver/gungrasp.cc index b27cc144..40bcdf09 100644 --- a/server/gameserver/gungrasp.cc +++ b/server/gameserver/gungrasp.cc @@ -25,7 +25,7 @@ GunGrasp::~GunGrasp() void GunGrasp::Init() { - if (owner_->IsHuman()) { + if (owner_->IsPlayer()) { TakeOnWeapon(owner_->GetCurrWeapon()); owner_->GetTrigger()->AddListener ( @@ -51,7 +51,7 @@ void GunGrasp::Clear() void GunGrasp::TakeOnWeapon(Weapon* weapon) { std::set* buffs = mt::Grasp::GetBuffs(owner_->AsHuman()->meta->id(), - owner_->GetBattleContext()->GetLevel(), + owner_->GetBattleContext()->GetHeroLevel(), weapon->meta->id()); Clear(); if (buffs) { diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 81308bf1..27a06f7d 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -563,6 +563,8 @@ void Human::FillMFObjectLess(Room* room, Human* hum, cs::MFPlayerFull* full_data p->set_shoot_offset_x(shoot_offset.x); p->set_shoot_offset_y(shoot_offset.y); p->set_level(GetBattleContext()->GetLevel()); + p->set_hero_level(GetBattleContext()->GetHeroLevel()); + p->set_hero_level(GetBattleContext()->GetHeroLevel()); GetCurrWeapon()->ToPB(this, p->mutable_weapon()); PBUtils::Ability_FillMFAttrAdditionList(GetAbility().get(), this, p); if (GetCar()) { @@ -584,6 +586,9 @@ void Human::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data p->set_health(GetHP()); p->set_level(GetBattleContext()->GetLevel()); + #if 0 + p->set_Hero_level(GetBattleContext()->GetHeroLevel()); + #endif p->set_max_health(GetMaxHP()); p->set_dead(dead); p->set_downed(downed); @@ -799,6 +804,7 @@ void Human::FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_o team_data->set_player_id(GetUniId()); team_data->set_hero_id(meta->id()); team_data->set_level(hum->GetBattleContext()->GetLevel()); + team_data->set_hero_level(hum->GetBattleContext()->GetHeroLevel()); team_data->set_score(stats->pve_rank_score); if (is_game_over || !real_dead || room->GetFrameNo() - GetRealDeadFrameNo(room) < 4) { TypeConvert::ToPb(GetPos(), team_data->mutable_pos()); diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 8a0cf919..9e57c194 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -331,6 +331,7 @@ message MFPlayerFull optional int32 gemstone = 68; //宝石 optional int32 level = 69; //等级 + optional int32 hero_level = 72; //hero等级 optional int32 team_member_num = 70 [default = 0]; //队伍成员数 } @@ -632,6 +633,7 @@ message MFTeamData optional int32 score = 63 [default = 0]; //pve模式积分 optional int32 hero_id = 64 [default = 0]; //英雄id(只同步一次) optional int32 level = 65 [default = 0]; //等级 + optional int32 hero_level = 72; //hero等级 //一下字段只在结算的时候该字段才有内容 optional string account_id = 10; //账号id