diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 6017fa8..990c2a9 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -1,5 +1,7 @@ #include "precompile.h" +#include + #include "obstacle.h" #include "metamgr.h" #include "room.h" @@ -155,6 +157,11 @@ void Obstacle::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_d p->set_dead(IsDead(room)); p->set_dead_at_thisframe(IsDead(room) ? GetDeadFrameNo(room) <= room->GetFrameNo() : false); + if (!IsPermanent()) { + RoomObstacle* ob = (RoomObstacle*)this; + p->set_born_frameno(ceil(ob->born_frameno / 2.0)); + } + p->set_is_door(is_door_); if (is_door_ && IsPermanent()) { ObstacleData* data = room->GetPermanentObstacleData(GetUniId()); diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index a181018..cee3da9 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -58,6 +58,7 @@ void RoomObstacle::Initialize() if (meta->sweep_tags != 0) { room->mine_objects[GetUniId()] = GetWeakPtrRef(); } + born_frameno = room->GetFrameNo(); } void RoomObstacle::RecalcSelfCollider() diff --git a/server/gameserver/roomobstacle.h b/server/gameserver/roomobstacle.h index ad658c8..afd4b79 100644 --- a/server/gameserver/roomobstacle.h +++ b/server/gameserver/roomobstacle.h @@ -22,6 +22,7 @@ class RoomObstacle : public Obstacle std::shared_ptr context_ability; bool sweep_lock = false; MetaData::Buff* buff_meta = nullptr; + long long born_frameno = 0; virtual ~RoomObstacle() override; virtual void Initialize() override; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index b89357e..6f682d9 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -293,6 +293,8 @@ message MFObstacleFull optional int32 obj_uniid = 1; //唯一id optional MFVec2 pos = 2; //位置 optional float scale = 3; //缩放比 + //出生帧号 born_frameno == SMUpdate.frmanoe时表示在当前这帧出生(可能出现为0的情况比如静态物件) + optional int32 born_frameno = 4 [default = 0]; optional int32 obstacle_id = 6; //阻挡物id optional float health = 7; //血量