diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index dab0a7c..8d3273d 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -65,7 +65,7 @@ void Human::Initialize() Entity::Initialize(); skill_xtimer_attacher_.xtimer = &room->xtimer; RecalcSelfCollider(); - volume_ = meta->volume; + volume_ = meta_->volume; observers_.insert(this); } @@ -136,15 +136,20 @@ void Human::FillMFObjectFull(cs::MFObjectFull* full_data) void Human::GetAabbBox(AabbCollider& aabb_box) { - if (!meta) { + if (!meta_) { abort(); } aabb_box.active = true; aabb_box.owner = this; - aabb_box._min.x = -meta->i->radius(); - aabb_box._min.y = -meta->i->radius(); - aabb_box._max.x = meta->i->radius(); - aabb_box._max.y = meta->i->radius(); + aabb_box._min.x = -meta_->i->radius(); + aabb_box._min.y = -meta_->i->radius(); + aabb_box._max.x = meta_->i->radius(); + aabb_box._max.y = meta_->i->radius(); +} + +void Human::SetMeta(MetaData::Player* hum_meta) +{ + meta_ = hum_meta; } void Human::FillMFTeamData(cs::MFTeamData* team_data) @@ -233,12 +238,12 @@ void Human::RecalcSelfCollider() AddCollider(self_collider_); } self_collider_->pos = a8::Vec2(); - self_collider_->rad = meta->i->radius(); + self_collider_->rad = meta_->i->radius(); } bool Human::IsCollisionInMapService() { - if (room->OverBorder(pos, meta->i->radius())){ + if (room->OverBorder(pos, meta_->i->radius())){ return true; } @@ -356,7 +361,7 @@ void Human::FindPathInMapService() float Human::GetRadius() { - return meta->i->radius(); + return meta_->i->radius(); } float Human::GetHP() @@ -1772,7 +1777,7 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase) { if (obstacle->master->team_id != hum->team_id) { if (hum->pos.Distance(obstacle->pos) < - hum->meta->i->radius()) { + hum->meta_->i->radius()) { obstacle->dead = true; obstacle->Explosion(); return false; diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 4458779..04b8d38 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -38,7 +38,6 @@ class Human : public Entity std::string from_appid; std::string team_uuid; int account_registertime = 0; - MetaData::Player* meta = nullptr; HumanAbility ability; int born_point = 0; int last_attacker_id = 0; @@ -108,6 +107,7 @@ class Human : public Entity virtual void FillMFObjectPart(cs::MFObjectPart* part_data) override; virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override; virtual void GetAabbBox(AabbCollider& aabb_box); + void SetMeta(MetaData::Player* hum_meta); void FillMFTeamData(cs::MFTeamData* team_data); void Shot(); void DirectShot(MetaData::Equip* bullet_meta, int skill_id); @@ -233,6 +233,8 @@ protected: std::set observers_; Human* follow_target_ = nullptr; bool follow_synced_active_player = false; + + MetaData::Player* meta_ = nullptr; MetaData::Skill* skill_meta_ = nullptr; MetaData::Tank* tank_meta_ = nullptr; MetaData::Driver* driver_meta_ = nullptr; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 000d8e4..64469d4 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -263,7 +263,7 @@ void Room::CreateAndroid(int robot_num) Android* hum = new Android(); hum->name = robot_meta->i->name(); - hum->meta = hum_meta; + hum->SetMeta(hum_meta); hum->robot_meta = robot_meta; hum->entity_uniid = AllocUniid(); hum->born_point = AllocBornPoint(); diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 7c7855c..c17f8b4 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -65,7 +65,7 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) room_hash_[room->room_uuid] = room; } Player* hum = PlayerMgr::Instance()->CreatePlayerByCMJoin(hdr.ip_saddr, hdr.socket_handle, msg); - hum->meta = hum_meta; + hum->SetMeta(hum_meta); room->AddPlayer(hum); hum->ProcPrepareItems(msg.prepare_items());