From b149874f652a09bdd3e42498437153e99bfd5edc Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 6 Jul 2020 19:46:58 +0800 Subject: [PATCH] 1 --- server/gameserver/building.cc | 4 ++-- server/gameserver/building.h | 4 ++-- server/gameserver/constant.h | 2 +- server/gameserver/entity.h | 5 +++-- server/gameserver/framemaker.cc | 4 ++-- server/gameserver/human.cc | 6 +++--- server/gameserver/human.h | 6 +++--- server/gameserver/loot.cc | 4 ++-- server/gameserver/loot.h | 4 ++-- server/gameserver/obstacle.cc | 5 +++-- server/gameserver/obstacle.h | 4 ++-- server/gameserver/types.h | 8 ++++++++ server/tools/protobuild/cs_proto.proto | 4 ++-- 13 files changed, 35 insertions(+), 25 deletions(-) diff --git a/server/gameserver/building.cc b/server/gameserver/building.cc index 9f93933..f62e118 100644 --- a/server/gameserver/building.cc +++ b/server/gameserver/building.cc @@ -46,7 +46,7 @@ void Building::RecalcSelfCollider() AutoAdjust(collider_list); } -void Building::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) +void Building::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) { part_data->set_object_type(ET_Building); cs::MFBuildingPart* p = part_data->mutable_union_obj_3(); @@ -54,7 +54,7 @@ void Building::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) TypeConvert::ToPb(GetPos(), p->mutable_pos()); } -void Building::FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) +void Building::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) { full_data->set_object_type(ET_Building); cs::MFBuildingFull* p = full_data->mutable_union_obj_3(); diff --git a/server/gameserver/building.h b/server/gameserver/building.h index 35ca5ab..6d40801 100644 --- a/server/gameserver/building.h +++ b/server/gameserver/building.h @@ -23,8 +23,8 @@ class Building : public Entity virtual ~Building() override; virtual void Initialize() override; void RecalcSelfCollider(); - virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) override; - virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) override; + virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; + virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; virtual void GetAabbBox(AabbCollider& aabb_box) override; protected: diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 5bb2196..a335c8f 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -306,7 +306,7 @@ const int DEFAULT_BORN_POINT_Y = 3000; const int ADPLAY_BUFFID = 1006; -const int FIXED_OBJECT_MAXID = 2018; +const int FIXED_OBJECT_MAXID = 1024; const int MAX_ROOM_IDX = 2018; diff --git a/server/gameserver/entity.h b/server/gameserver/entity.h index 610d20f..be7cf67 100644 --- a/server/gameserver/entity.h +++ b/server/gameserver/entity.h @@ -10,6 +10,7 @@ class Room; class ColliderComponent; class AabbCollider; class CircleCollider; +class Human; class Entity { public: @@ -17,8 +18,8 @@ class Entity Entity(); virtual ~Entity(); virtual void Initialize(); - virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) {}; - virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) {}; + virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) {}; + virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) {}; virtual float GetSpeed() { return 1.0f;}; virtual void GetAabbBox(AabbCollider& aabb_box); virtual void GetCircleBox(CircleCollider& circle_box); diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index cbd4025..e5d1e9f 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -17,7 +17,7 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum) } #endif if (hum->IsPlayer()) { - itr->FillMFObjectFull(room, msg->add_full_objects()); + itr->FillMFObjectFull(room, (Human*)hum, msg->add_full_objects()); } } for (auto& itr : hum->part_objects) { @@ -27,7 +27,7 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum) continue; } else { } - entity->FillMFObjectPart(room, msg->add_part_objects()); + entity->FillMFObjectPart(room, (Human*)hum, msg->add_part_objects()); } for (auto& itr : hum->del_objects) { msg->add_del_objids(itr); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index e8ffda0..a7da07e 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -105,7 +105,7 @@ float Human::GetSpeed4() return meta->i->move_speed4(); } -void Human::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) +void Human::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) { part_data->set_object_type(ET_Player); cs::MFPlayerPart* p = part_data->mutable_union_obj_1(); @@ -114,7 +114,7 @@ void Human::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) TypeConvert::ToPb(attack_dir, p->mutable_dir()); } -void Human::FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) +void Human::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) { full_data->set_object_type(ET_Player); cs::MFPlayerFull* p = full_data->mutable_union_obj_1(); @@ -3190,7 +3190,7 @@ void Human::NotifyObservers(cs::SMUpdate* msg, cs::MFActivePlayerData* active_pl GetViewObjects(view_objects); for (Entity* entity : view_objects) { if (new_objects.find(entity) == new_objects.end()) { - entity->FillMFObjectFull(room, msg->add_full_objects()); + entity->FillMFObjectFull(room, this, msg->add_full_objects()); } } refreshed_view = true; diff --git a/server/gameserver/human.h b/server/gameserver/human.h index e3227a0..8f43c02 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -152,8 +152,8 @@ class Human : public MoveableEntity virtual void Initialize() override; virtual float GetSpeed() override; virtual float GetSpeed4(); - virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) override; - virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) override; + virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; + virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; virtual void FillMFPlayerStats(cs::MFPlayerStats* stats); virtual void GetAabbBox(AabbCollider& aabb_box); virtual bool IsDead(Room* room) override; @@ -357,7 +357,7 @@ private: std::array buff_attr_abs_ = {}; std::array buff_attr_rate_ = {}; - std::array fixed_object_sync_flags_ = {}; + std::array fixed_object_sync_flags_ = {}; bool already_report_battle_ = false; bool sent_battlereport_ = false; diff --git a/server/gameserver/loot.cc b/server/gameserver/loot.cc index 975581b..50dae5d 100644 --- a/server/gameserver/loot.cc +++ b/server/gameserver/loot.cc @@ -29,7 +29,7 @@ void Loot::RecalcSelfCollider() { } -void Loot::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) +void Loot::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) { part_data->set_object_type(ET_Loot); cs::MFLootPart* p = part_data->mutable_union_obj_5(); @@ -37,7 +37,7 @@ void Loot::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) TypeConvert::ToPb(GetPos(), p->mutable_pos()); } -void Loot::FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) +void Loot::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) { full_data->set_object_type(ET_Loot); cs::MFLootFull* p = full_data->mutable_union_obj_5(); diff --git a/server/gameserver/loot.h b/server/gameserver/loot.h index 1494fac..8869cdb 100644 --- a/server/gameserver/loot.h +++ b/server/gameserver/loot.h @@ -25,8 +25,8 @@ class Loot : public RoomEntity virtual ~Loot() override; virtual void Initialize() override; void RecalcSelfCollider(); - virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) override; - virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) override; + virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; + virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; protected: Loot(); diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 5e08112..f79e0ac 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -99,7 +99,7 @@ void Obstacle::RecalcSelfCollider() } } -void Obstacle::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) +void Obstacle::FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) { part_data->set_object_type(ET_Obstacle); cs::MFObstaclePart* p = part_data->mutable_union_obj_2(); @@ -108,9 +108,10 @@ void Obstacle::FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) p->set_scale(1.0f); } -void Obstacle::FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) +void Obstacle::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) { full_data->set_object_type(ET_Obstacle); + cs::MFObstacleFull* p = full_data->mutable_union_obj_2(); p->set_obj_uniid(GetEntityUniId()); TypeConvert::ToPb(GetPos(), p->mutable_pos()); diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index d272d68..51506e7 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -29,8 +29,8 @@ class Obstacle : public Entity virtual ~Obstacle() override; virtual void Initialize() override; virtual void RecalcSelfCollider(); - virtual void FillMFObjectPart(Room* room, cs::MFObjectPart* part_data) override; - virtual void FillMFObjectFull(Room* room, cs::MFObjectFull* full_data) override; + virtual void FillMFObjectPart(Room* room, Human* hum, cs::MFObjectPart* part_data) override; + virtual void FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data) override; virtual void GetAabbBox(AabbCollider& aabb_box) override; virtual void GetCircleBox(CircleCollider& circle_box) override; virtual bool IsDead(Room* room) override; diff --git a/server/gameserver/types.h b/server/gameserver/types.h index 529e479..e7ef129 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -137,6 +137,14 @@ struct ObstacleData DoorState_e door_state = DoorStateClose; }; +#pragma pack(1) +struct ObjectSyncFlags +{ + unsigned char flags = 0; + unsigned char last_sync_frameno = 0; +}; +#pragma pack() + class GridService; class MapService; class Building; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 21391bd..28aefab 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -418,8 +418,8 @@ message MFObjectFull optional MFSmokeFull union_obj_9 = 10; optional MFHeroFull union_obj_10 = 11; - optional int32 obj_uniid = 100; //唯一id - optional int32 object_flags = 101; //对象标志位 1<<0: 存缓存 1<<1:读缓存 + optional int32 obj_uniid = 14; //唯一id + optional int32 object_flags = 15; //对象标志位 1<<0: 存缓存 1<<1:读缓存 } //活跃玩家数据(当前)